Imagemagick不符合绘图原语定义`,'@ error / draw.c / DrawImage / 3169

时间:2016-04-19 11:16:58

标签: php imagick

这似乎是一个与口音有关的问题。这段代码已经完美地用于超过一百万张照片水印,但只要水印中有一个重点(在这种情况下,e急,é[是的,我已经仔细检查过那个角色是什么])它会吐出来错误。

我正在使用Myriad Pro ttf文件,我已经检查过它确实包含该字符。

这是一个已知问题吗?如果是这样,那么解决方法是什么?

$draw = new ImagickDraw();
$draw->setFont('MyriadPro-Regular.ttf');
$draw->annotation(100, 100, 'é');
$photo->drawImage($draw);

2 个答案:

答案 0 :(得分:0)

(道歉,这还不是答案,但对评论框来说太长了)

  

这是一个已知问题吗?

不。

我唯一能想到的就是尝试使用非utf8字符,这是SVG渲染器不喜欢的。虽然它看起来像一个正常的急性重音e,并且你已经说过你已经检查了,请你通过显示这个功能的输出来仔细检查:

function showRawCharacters($result) {
    $resultInHex = unpack('H*', $result);
    $resultInHex = $resultInHex[1];
    $resultSeparated = implode(', ', str_split($resultInHex, 2)); //byte safe
    echo $resultSeparated;
}

对于你正在使用的字符串。

另外,请确认您在代码中的任何位置都没有使用setlocale。

为了记录,你的代码工作正常,所以我怀疑你的代码会出现问题。它更可能是环境中的东西,库版本或一般非显而易见的东西。

修改的 我强烈怀疑你的代码中的某些地方改变了语言环境,这是不安全的,这就是为什么我认为它应该是removed from PHP

请你能跑:

var_dump(setlocale(LC_ALL, "0"));

紧接->annotation行之前,将结果添加到您的问题中。

答案 1 :(得分:0)

var rolePath = `image Over ${role.outX},${role.outY},${role.outW},${role.outH},"${role.rolePath}"`;

添加图片

gm(backimgPath).draw(rolePath)