Imagemagik不符合图形基元定义`,';@error/draw.c/DrawImage/3169


Imagemagick non-conforming drawing primitive definition `,' @ error/draw.c/DrawImage/3169

这似乎是一个与重音有关的问题。该代码已经完美地适用于超过一百万个照片水印,但一旦水印中有重音(在本例中为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)