Символы Восточной Азии отображаются в виде квадратов с помощью PHP imagettftext () - PullRequest
1 голос
/ 24 февраля 2009

Я пытаюсь визуализировать изображения с текстом verdana, используя функцию PHP imagettftext. Тем не менее, все восточно-азиатские символы отображаются неправильно. Я пытался использовать другие шрифты, такие как Tahoma и Lucida Grande, но ни один из них не работает. Arial Unicode, однако, работает отлично.

Проблема в том, что я не хочу использовать Arial в качестве шрифта. Можно ли как-нибудь визуализировать, используя такой шрифт, как Verdana?

(не специалист по юникоду и / или шрифту; поэтому объяснение проблемы будет полезно)

Ответы [ 3 ]

3 голосов
/ 24 февраля 2009

Ни один из Verdana, Tahoma или Lucida Grande не содержит китайских / японских / корейских символов, поэтому они никогда не смогут отобразить их «правильно». Ни один шрифт не содержит глифов для каждого кода Unicode, поэтому в зависимости от того, что вы выберете, в какой-то момент вы потеряете символы.

Там - это шрифт, похожий на Verdana и содержащий некоторые символы CJK - в частности, японский кандзи. Может быть, этого достаточно, чтобы охватить то, что вы пытаетесь сделать? Он называется Meiryo и поставляется с Windows Vista / 7. Вы также можете получить его здесь . Однако это файл TrueType Collection (.ttc), который я не уверен, может ли PHP / GD обрабатывать напрямую; многие восточноазиатские шрифты представлены в виде файлов .ttc, поскольку они обычно содержат как пропорциональные, так и моноширинные шрифты, основанные на одинаковых формах глифов.

Если PHP не справляется с .ttc, вам может потребоваться преобразовать из него Meiryo-пропорциональный шрифт в отдельный файл .ttf, используя либо редактор шрифтов, либо простую командную строку 'breakttc.exe' инструмент из TrueType SDK (ttsdk.zip, таинственно исчез с microsoft.com, но легко обнаруживается с помощью Google).

1 голос
/ 24 февраля 2009

IIRC Ваш шрифт TrueType должен содержать символы Unicode.

Вы можете увидеть, сколько символов у определенного шрифта есть в инструменте Карта символов в Windows.

0 голосов
/ 24 февраля 2009

Раньше я отображал японские символы с imagettftext , используя шрифт для Восточной Азии напрямую. Некоторые из них поставляются в комплекте с Windows: «simsun» (китайский), «MS Gothic» (японский), «Ms Mincho» (японский). Последние два эквивалента без засечек и засечек для японского текста. Я думаю, что у китайцев тоже есть оба стиля. В моем старом php-коде он использует файлы шрифтов с расширением .ttc, не знаю почему. Возможно, TTF - это определение, а фактический шрифт - это файл TTC? (это было давно)

В любом случае, что касается использования Arial и т. Д., В Windows, по крайней мере, работает так, что система обнаруживает символы вне «западного» диапазона Юникода и автоматически переключается на один из установленных по умолчанию «азиатских» шрифтов для рендеринга те. Это, среди прочего, приводит к тому, что некоторые пользователи получают китайские символы вместо японских или наоборот, потому что многие из этих символов имеют одинаковый диапазон Юникода, но в зависимости от того, какой шрифт используется, вы можете использовать стиль «китайский» или японский стиль.

Смешивание обоих шрифтов выглядит не очень хорошо. Использование чисто японского шрифта отобразит буквенные символы в моноширинном шрифте, который выглядит не очень хорошо.

Если ничего не помогло, вы можете попытаться разбить вашу строку на отдельные подстроки диапазона западных / восточных символов (цикл символов и проверить диапазон Юникода), а затем отобразить каждую часть соответствующим шрифтом. Помните, что восточные шрифты моноширинные (по крайней мере, китайский / японский, я не знаю о корейском и т. Д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...