imagestring создает размытый текст?

Я использую строку изображений, чтобы рисовать текст небольшого размера поверх моего изображения. Я использую это, чтобы нарисовать текст ($radUrl) и сохранить изображение ($img) в $radPath.

imagestring($img, 3, 8, 8, $radUrl, imagecolorallocate($img, 255, 0, 0));
imagejpeg($img, $radPath, 100);
//($radUrl is a string, $radPath is the path to save the image)

Текст, который он создает, размыт. Слишком размыто, чтобы читать. На изображении уже есть еще более мелкий ранее существовавший текст, который является четким и легко читаемым.

Почему текст такой размытый и как можно решить эту проблему?

Изменить. Использование изображений PNG устраняет эту проблему. Однако, чтобы сэкономить затраты на пропускную способность / вычислительную мощность, я должен придерживаться imagejpeg. Я знаю, что сжатие JPEG снижает качество всего, особенно строк/текста, но весь остальной текст на изображении в порядке.

На изображении ниже размытый красный текст вверху — это текст, созданный с помощью imagestring, а четкие белые названия городов уже были на исходном изображении, хранящемся на жестком диске моего сервера.

введите здесь описание изображения


person msbg    schedule 04.03.2014    source источник
comment
Лично я бы просто попробовал отладку, например, изменить выходной формат с jpg на другой формат, например png. Возможно, измените значение шрифта или даже загрузите другой шрифт с помощью imageloadfont. Если после этого не повезет, то, возможно, попробуйте удалить базовое изображение и посмотреть, имеет ли значение текст на плоском цветном фоне.   -  person Jonathan Kuhn    schedule 05.03.2014
comment
imagepng устраняет проблему с размытым текстом. Однако мне нужно использовать imagejpeg, так как imagepng использует больше вычислительной мощности для сжатия PNG и создает файлы большего размера. Мое веб-приложение потребляет довольно много трафика, и у меня ограниченный бюджет на расходы на сервер.   -  person msbg    schedule 05.03.2014
comment
Кроме этого, возможно, используйте свой собственный шрифт с помощью imageloadfont. Или просто используйте png и кешируйте изображение. Нет смысла заново создавать изображение каждый раз, если базовое изображение и/или текст не изменились. Если вы знаете, как часто меняется базовое изображение (и я сомневаюсь, что это происходит в реальном времени каждый раз), то просто напишите URL, сохраните на диск и вызовите изображение на диске.   -  person Jonathan Kuhn    schedule 05.03.2014
comment
Кроме того, как вы загружаете базовое изображение? Возможно, изменить это на такой, как imagecreatetruecolor(). Возможно, исходное изображение сжато, и оно применяется к тексту при записи, а затем распаковывается перед выводом. Просто угадаю. Если URL-адрес не меняется, возможно, сохраните его как изображение и скопируйте их вместе.   -  person Jonathan Kuhn    schedule 05.03.2014
comment
На самом деле я кэширую изображения именно так, как вы описываете. Я уже создаю изображения, используя imagecreatetruecolor. Я только что попытался использовать сжатые .PNG, и использование моей оперативной памяти стало максимальным (с 2,5/4 ГБ до 4/4 ГБ), скорость сервера заметно снизилась, а загрузка ЦП снизилась с 10% до 40%. Я не хочу использовать несжатые PNG, так как они слишком большие.   -  person msbg    schedule 05.03.2014
comment
Каждую секунду обрабатывается от 2 до 3 новых изображений. (Это было бы 10-20 без кэширования). На данный момент мне действительно нужно придерживаться JPEG.   -  person msbg    schedule 05.03.2014
comment
Как часто меняется URL? Помимо опции imagecopymerge, я думаю, что моя помощь подошла к концу, так как я еще не тестировал материал.   -  person Jonathan Kuhn    schedule 05.03.2014
comment
Существует около 1200 различных изображений с разными URL-адресами. Каждый из них меняет URL каждые 8-10 минут. (Все в случайных точках, не 1200 каждые десять минут, скорее 120 в минуту, 2 в секунду.) Спасибо за вашу помощь, просто кажется, что в моей ситуации изменение формата не сработает.   -  person msbg    schedule 05.03.2014


Ответы (1)


Вы рисуете красный текст на зеленом фоне. Это ужасная идея, если вы действительно не хотите сделать ее неразборчивой для около 10% мужского населения. Прежде чем продолжить, остановите все, что вы делаете, и прочитайте доступность веб-сайтов.

Размытость, которую вы испытываете в данный момент, является прямым результатом сжатия JPEG. Вот почему:

Человеческий глаз более чувствителен к изменению яркости, чем к изменению цвета. Это связано с тем, что человеческий глаз содержит гораздо больше палочек, чем колбочек. Сжатие JPEG использует подвыборку цветности, чтобы воспользоваться этим фактом. Как правило, информация о цветности (цвете) кодируется с половиной разрешения по горизонтали и половины разрешения по вертикали по сравнению с яркостью (яркостью).

Ваш красный текст имеет почти такую ​​же яркость, как и зеленый фон, на котором вы его разместили, поэтому вам приходится полностью полагаться на информацию о цветности с низким разрешением, чтобы прочитать ее.

Что вам нужно сделать, это выбрать лучший цвет. Или, что еще лучше, нарисуйте черный прямоугольник на изображении и поместите текст поверх него (используя светлый цвет, например белый или желтый, а не красный).

Но, пожалуйста, прочтите о веб-доступности, прежде чем что-либо делать.

person r3mainer    schedule 05.03.2014
comment
Спасибо за научный ответ! Я знаю, что это ужасный дизайн, сейчас я только тестирую текст. Я попробую добавить черный прямоугольник с белым текстом - person msbg; 05.03.2014