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