使用imagemagick显示fontawesome的编码错误

时间:2013-11-01 14:27:33

标签: php imagemagick font-awesome

我正在尝试使用fontawesome和imagemagick将它的角色显示为png,这是我的代码:

$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


任何想法如何解决这样的编码问题?

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

由于您获得多个字符而不是一个字符,因此看起来Unicode序列无法正确识别。如果你显示一个丢失的块 - 这是一个字体问题!

我在Ruby RMagic中有一个unicode转义工具,所以也许同样的序列在PHP中适合你?

http://fortawesome.github.io/Font-Awesome/cheatsheet/上,“fa-heart”列为“#xf004;” 这似乎是一个HTML转义,所以你需要的是:

$text = "\uf004";