3


我正在尝试将 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;


但图像输出看起来像这样 编码图像


知道如何解决这样的编码问题吗?

4

2 回答 2

2

使用此答案中的示例来确保将 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;
于 2014-09-29T03:35:38.377 回答
0

看起来 Unicode 序列没有被正确识别,因为你得到了多个字符而不是一个字符。如果你得到一个丢失的块显示 - 这是一个字体问题!

我有一个在 Ruby RMagic 中工作的 unicode 转义,所以也许相同的序列在 PHP 中对你有用?

http://fortawesome.github.io/Font-Awesome/cheatsheet/上,“fa-heart”被列为“#xf004;” 这似乎是一种 HTML 转义,因此您需要的应​​该是:

$text = "\uf004";
于 2013-11-12T11:41:57.443 回答