ImageTTFtext отображает html-значения для специальных символов

Я смотрел везде, но я не могу понять, почему я столкнулся с этой проблемой.

Я использую phpThumb, чтобы добавить текст (водяной знак) на некоторые фотографии. Проблема в том, что мне нужно использовать специальные символы из Норвегии (æøå). Они не очень хорошо работают с ImageTTFtext.

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

Изображение выше содержит код для æ и должен (согласно документации) быть правильным. Я также пробовал некоторые функции, которые я нашел здесь, в стеке, но все возвращается одинаково. Почему он печатает код, а не фактический символ, который я пытаюсь отобразить?

Это из-за старой версии какого-то софта или чего-то еще?

Версии:

PHP 5.3.2
ImageMagick 6.5.7
GD: 2.0

РЕДАКТИРОВАТЬ: Просто чтобы было ясно, я передаю текст «правильным» способом в соответствии с документами. Передача utf_encode('€') в качестве аргумента ДОЛЖНА РАБОТАТЬ.


person OptimusCrime    schedule 30.10.2012    source источник
comment
Какую буквальную строку вы передаете этой функции? Как вы называете эту функцию? Вполне вероятно, что вы передаете свою строку в ImageTTFtext точно так же. Тогда неудивительно, что вы это видите, так что это не настоящий вопрос.   -  person hakre    schedule 30.10.2012
comment
Кроме того, если вы следовали другим ответам, необходимо указать, что именно вы сделали до сих пор, и точно указать, почему существующие ответы не помогли вам в вашем вопросе.   -  person hakre    schedule 30.10.2012
comment
@hakre: Я пропустил что-то важное? Я просто вызываю его, например, "€" в качестве аргумента функции. Документы говорят, что это должна быть строка.   -  person OptimusCrime    schedule 31.10.2012
comment
пытались ли вы написать свой текст после передачи его в html_entity_decode ?   -  person Alain Tiemblo    schedule 31.10.2012
comment
@Ninsuo: Да, но я решил проблему. Оказалось, что встроенный шрифт не поддерживает специальные символы. Как только я загрузил свой собственный, он работал как шарм. В любом случае спасибо   -  person OptimusCrime    schedule 31.10.2012
comment
Функция imagettftext, к которой вы относитесь в вопросе, не имеет необязательного параметра файла шрифта. Добавьте свой код в следующий раз, чтобы эти очевидные ошибки сразу были видны.   -  person hakre    schedule 31.10.2012


Ответы (2)


Вас беспокоит параметр text для imagettftext. Давайте рассмотрим его документацию:

Текстовая строка в кодировке UTF-8.

Может включать десятичные числовые ссылки на символы (в форме: € [€]) для доступа к символам в шрифте после позиции 127. Поддерживается шестнадцатеричный формат (например, © [©]). Строки в кодировке UTF-8 можно передавать напрямую.

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

Кроме того, эта функция является частью расширения gd, а не ImageMagick.

Версия PHP 5.3.2 также устарела, однако я не сканировал ее журнал изменений (и версию библиотеки GD, которую вы используете), если есть ошибка, соответствующая тому, что вы описали. Но это кажется возможным.

В любом случае должен imagettftext правильно отображать текст. Даже если персонаж не найден, вы увидите что-то другое.

Если в строке используется символ, который не поддерживается шрифтом, пустой прямоугольник заменит символ. Из описания параметров:

Предоставьте шестнадцатеричный дамп строки вы переходите к этой функции и добавляете ее к своему вопросу.

person hakre    schedule 30.10.2012
comment
Спасибо за ваш ответ, но я только что ответил на него сам. Я сделал все, что вы написали. Я использовал правильную строку (скопированную из phpdocs) и пробовал все комбинации html_entity, utf8_encode/decode и так далее. Оказывается, стандартный шрифт, который использует библиотека, не поддерживает мои символы. - person OptimusCrime; 31.10.2012
comment
Ну, я никоим образом не предлагал вам попробовать комбинации различных строковых функций, в т.ч. html_entity или utf8_encode или что-то еще. Я просто попросил разъяснений, и прежде чем делать выводы, я прямо написал, что вам нужно предоставить дополнительную информацию, например фрагмент кода, с которым это связано, и шестнадцатеричный дамп строки. - person hakre; 31.10.2012

Отвечая на это, чтобы любой, кто сталкивается с той же проблемой, что и я, мог найти решение.

Оказывается "встроенный" шрифт от GD не поддерживал мои спецсимволы. Загрузите свои собственные шрифты и используйте их в функции, должно работать.

person OptimusCrime    schedule 30.10.2012
comment
встроенный? Параметр fontfile не кажется мне необязательным. Также вы не разместили никакого кода в вопросе, поэтому было полностью скрыто, что вы не указали какой-либо шрифт. - person hakre; 31.10.2012
comment
Та же проблема здесь - так как вы используете специальные символы шрифтов? - person v3nt; 30.10.2013
comment
@danielCrabbe: см. документацию us2.php.net/imagettftext. В аргументе вы просто указываете расположение файла шрифта (если он не один из встроенных). Если вы используете пользовательский файл, вы можете загрузить его (.ttf). Не забудьте указать файл относительно скрипта. - person OptimusCrime; 30.10.2013
comment
Шрифт уже указан и работает - только не те символы, которые мне пришлось перекодировать для строки с помощью html_entity_decode($text); - person v3nt; 07.11.2013