2013-11-01 3 views
3


я пытаюсь использовать fontawesome с ImageMagick, чтобы отобразить это символ, как PNG,
вот мой код:
ошибка кодирования отображения fontawesome с ImageMagick

$size = '50'; 
$text = ''; 
$imgW = 200; 
$imgH = 200; 
$font = 'fontawesome-webfont.ttf'; 
$image = new Imagick(); 
$image->setResolution(144,144); 
$draw = new ImagickDraw(); 
$draw->setFont($font); 
$draw->setFontSize($size); 
//$draw->setTextEncoding('UTF-8'); 
//$draw->setStrokeAntialias(true); 
//$draw->setTextAntialias(true); 
$image->newImage($imgW, $imgH, new ImagickPixel('none')); 
$image->annotateImage($draw, 10, 45, 0, $text); 
$image->setImageFormat('png'); 
header('Content-type: image/png'); 
echo $image; 


, но выходное изображение выглядит следующим образом coded image


любая идея, как исправить такую ​​проблему кодирования?

+0

Является ли 'fontawesome-webfont.ttf' в том же каталоге? – Pitchinnate

+0

наверняка причина, если не в том же каталоге или каталоге недействительна, это произойдет через исключение, а не для рендеринга изображения –

ответ

0

Похоже, что последовательность Unicode не распознается должным образом, поскольку вы получаете несколько символов, а не только один. Если вы получите один недостающий блок - это проблема с шрифтом!

У меня есть unicode escape, работающий в Ruby RMagic, так что, возможно, такая же последовательность будет работать на вас в PHP?

http://fortawesome.github.io/Font-Awesome/cheatsheet/ «fa-heart» указан как «# xf004;» Это, как представляется, HTML бежать, так что вам нужно должно быть:

$text = "\uf004"; 
+0

, к сожалению, я попытался экранировать, но не работал в php –

+0

Вы также установили скрипт PHP для работы в UTF- 8 режим? mb_internal_encoding ("UTF-8"); // Дополнительная информация: http://php.net/manual/en/function.mb-internal-encoding.php –

+0

Установите оба набора символов в UTF-8. mb_internal_encoding ("UTF-8"); и используйте $ draw-> setTextEncoding ('UTF-8'); –

2

Используя пример из this answer, чтобы гарантировать, что я имел строку UTF-8, передаваемой в ImageMagick работает для меня. Единственное изменение вашего кода - вторая строка:

$size = '50'; 
$text = html_entity_decode("", ENT_COMPAT, 'UTF-8'); 
$imgW = 200; 
$imgH = 200; 
$font = 'fontawesome-webfont.ttf'; 
$image = new Imagick(); 
$image->setResolution(144,144); 
$draw = new ImagickDraw(); 
$draw->setFont($font); 
$draw->setFontSize($size); 
//$draw->setTextEncoding('UTF-8'); 
//$draw->setStrokeAntialias(true); 
//$draw->setTextAntialias(true); 
$image->newImage($imgW, $imgH, new ImagickPixel('none')); 
$image->annotateImage($draw, 10, 45, 0, $text); 
$image->setImageFormat('png'); 
header('Content-type: image/png'); 
echo $image; 
Смежные вопросы