这似乎是一个与重音有关的问题。该代码已经完美地适用于超过一百万个照片水印,但一旦水印中有重音(在本例中为e acute,é[是的,我已经仔细检查了字符是什么]),它就会显示错误。
我正在使用Myriad Pro ttf文件,我已经检查过了,它确实包含那个字符。
这是已知的问题吗?如果是,解决方法是什么?
$draw = new ImagickDraw();
$draw->setFont('MyriadPro-Regular.ttf');
$draw->annotation(100, 100, 'é');
$photo->drawImage($draw);
(抱歉,这还不是答案,但对于评论框来说太长了)
这是已知的问题吗?
没有。
我唯一能想到的就是尝试使用一个非utf8字符,而SVG渲染器不喜欢这个字符。虽然它看起来像一个正常的锐音符e,而且你已经说过你已经检查过了,但请你通过显示这个函数的输出来仔细检查一下:
function showRawCharacters($result) {
$resultInHex = unpack('H*', $result);
$resultInHex = $resultInHex[1];
$resultSeparated = implode(', ', str_split($resultInHex, 2)); //byte safe
echo $resultSeparated;
}
对于您正在使用的字符串。
另外,请确认您的代码中没有使用setlocale。
请注意,您的代码运行良好,所以我怀疑您的代码是否有问题。它更有可能是环境中的东西,库版本或一般不明显的东西。
编辑我强烈怀疑你的代码中有什么东西改变了区域设置,这是不安全的,这就是为什么我认为应该从PHP 中删除它
请运行:
var_dump(setlocale(LC_ALL, "0"));
紧接在->annotation
行之前,将结果添加到您的问题中。
var rolePath = `image Over ${role.outX},${role.outY},${role.outW},${role.outH},"${role.rolePath}"`;
通过添加图像
gm(backimgPath).draw(rolePath)