Функция PHP GD imagettftext() должна обратить внимание на кодировку символов по умолчанию.
Автор:Eve Cole
Время обновления:2009-06-07 15:15:31
Сейчас я разрабатываю небольшую функцию, похожую на персонализированную подпись на форуме. Она автоматически генерирует изображение с текстом на основе информации об участниках. Сшивание изображений можно выполнить с помощью таких функций, как imagecopy() и imagecopyresampled(). Однако когда дело доходит до рисования текста, я сталкиваюсь с проблемой. Текстовый шаблон сохраняется в текстовом файле. Программа сначала считывает файл и заменяет в нем переменные данными, а затем с помощью функции imagettftext() рисует их на картинке. К сожалению, нарисованная картинка искажается @_@. ... Итак, я поискал связанные проблемы в Google и обнаружил, что большинство людей говорили, что строка, передаваемая в функцию imagettftext(), должна быть закодирована в UTF-8, а в официальном руководстве PHP также четко указано: «Строка в кодировке UTF-8». «Его можно передать напрямую», но проблема в том, что кодировка файла шаблона изначально UTF-8, что немного озадачивает. В отчаянии я использовал EmEditor, чтобы открыть исходный файл шаблона, попытался преобразовать его в разные кодировки и сравнил с искаженным кодом, полученным GD. Оказалось, что когда я конвертировал в кодировку EUC-JP, он фактически соответствовал искаженному коду. вывод GD... то есть кодировка GD по умолчанию на сервере здесь - EUC-JP, и это японская кодировка. Я просмотрел настройки php.ini и не нашел подходящих опций, поэтому возник еще один вопрос: где установлена эта кодировка по умолчанию? Брат Си Вэня Ню обнаружил, что в параметрах компиляции PHP есть очень подозрительный параметр «--enable-gd-jis-conv». Google обнаружил, что многие искаженные проблемы были связаны с этим параметром компиляции... Официально. описание параметра Это «GD: включить поддержку японских шрифтов, отображаемых в формате JIS». Это означает, что GD поддерживает шрифты в японской кодировке (черт побери, почему нет опции компиляции для поддержки шрифтов в китайской кодировке... Дискриминирует ли PHP также национальность = =b), проще говоря, включите ее. Если эта опция включена, GD будет отображать части больше 127 в библиотеке шрифтов TTF (то есть части, которые не принадлежат стандартной библиотеке латинских шрифтов) в соответствии с в порядке японского JIS, и тогда он, естественно, будет искажен при использовании для сопоставления китайских шрифтов. Не мудрствуя лукаво, удалите эту опцию и перекомпилируйте, и проблема будет решена. После удаления этой опции кодировка imagettftext() по умолчанию становится UTF-8, и китайский язык может отображаться нормально~