Php Imagemagick不符合图纸原语定义“,';@错误/draw.c/DrawImage/3169

Php Imagemagick不符合图纸原语定义“,';@错误/draw.c/DrawImage/3169,php,imagick,Php,Imagick,这似乎是一个与口音有关的问题。这段代码已经完美地处理了超过一百万个照片水印,但一旦水印中有重音(在本例中是e acute,é[是的,我已经仔细检查了字符的性质]),它就会抛出错误 我正在使用Myriad Pro ttf文件,我已经检查过了,它确实包含那个字符 这是一个已知的问题吗?如果是,解决办法是什么 $draw = new ImagickDraw(); $draw->setFont('MyriadPro-Regular.ttf'); $draw->annotation(100,

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

作为记录,您的代码运行良好,因此我怀疑您的代码是否有问题。它更可能是环境中的某个东西、库版本或一般不明显的东西

编辑 我强烈怀疑你的代码中有什么地方改变了语言环境,这是不安全的,这就是为什么我认为应该这样做

请你能跑:

var_dump(setlocale(LC_ALL, "0"));
->注释
行之前,将结果添加到您的问题中。

(抱歉,这还不是答案,但对于注释框来说太长了)

var rolePath = `image Over ${role.outX},${role.outY},${role.outW},${role.outH},"${role.rolePath}"`;
这是一个已知的问题吗

没有

我认为唯一会导致它使用非utf8字符的是SVG渲染器不喜欢的字符。虽然它看起来像一个普通的急性口音e,并且您已经说过您已经检查过了,但是您可以通过显示此函数的输出来再次检查一下吗:

function showRawCharacters($result) {
    $resultInHex = unpack('H*', $result);
    $resultInHex = $resultInHex[1];
    $resultSeparated = implode(', ', str_split($resultInHex, 2)); //byte safe
    echo $resultSeparated;
}
对于您正在使用的字符串

另外,请确认代码中没有使用setlocale

作为记录,您的代码运行良好,因此我怀疑您的代码是否有问题。它更可能是环境中的某个东西、库版本或一般不明显的东西

编辑 我强烈怀疑你的代码中有什么地方改变了语言环境,这是不安全的,这就是为什么我认为应该这样做

请你能跑:

var_dump(setlocale(LC_ALL, "0"));
紧靠
->注释
行之前,将结果添加到问题中

var rolePath = `image Over ${role.outX},${role.outY},${role.outW},${role.outH},"${role.rolePath}"`;
将图像添加到

gm(backimgPath).draw(rolePath)
将图像添加到

gm(backimgPath).draw(rolePath)

可以添加一个重新创建此问题的一行程序吗?可以添加一个重新创建此问题的一行程序吗?c3,a9NULL。我现在知道,脚本只有在作为图像上传程序的一部分调用时才会失败。如果我单独调用它(无论是从浏览器还是CLI),它都可以工作。奇怪的如果我用一个普通的“e”来替换这个字符,它在所有方面都能正常工作。@Codemonkey你能试试我刚才添加的setlocale吗?@Codemonkey你能回答你自己的问题吗?如果你已经弄明白了吗?我不能,在我将文本更改为非重音版本后,问题就消失了,当我把它改回重读版本时,它就离开了。我只能假设,尽管这个角色看起来很普通,但它有点古怪。当我运行它通过各种在线测试时,它说它很好,但我从网站前端而不是数据库复制并粘贴了它,也许chrome已经“清除”了字符或其他东西。c3,a9NULL。我现在知道,脚本只有在作为图像上传程序的一部分调用时才会失败。如果我单独调用它(无论是从浏览器还是CLI),它都可以工作。奇怪的如果我用一个普通的“e”来替换这个字符,它在所有方面都能正常工作。@Codemonkey你能试试我刚才添加的setlocale吗?@Codemonkey你能回答你自己的问题吗?如果你已经弄明白了吗?我不能,在我将文本更改为非重音版本后,问题就消失了,当我把它改回重读版本时,它就离开了。我只能假设,尽管这个角色看起来很普通,但它有点古怪。当我运行它通过各种在线测试时,它说它很好,但我从网站前端而不是数据库复制并粘贴了它,也许chrome已经“清理”了角色或其他东西。