我想创建一个验证码图片使用转换从ImageMagick。

我也这么做了,但是有一些问题。

在我的linux shell:

convert -background white -fill black -font FreeSerif-Bold -pointsize 36 label:'adfgh' ./test.png

错误是:

adfgh @ error/constitute.c/ReadImage/453 转换:缺少一个图像文件名。/test.png @ 错误/ convert.c / ConvertImageCommand / 3015

我的ImageMagick:版本:6.7.2-7,我安装它yum install ImageMagick。

我笨。有什么建议吗?


当前回答

在阅读了这里的一些建议并结合这些想法后,对我来说,以下修改/etc/ imagemagick -6/policy.xml是必要的:

<policy domain="coder" rights="read|write" pattern="PDF" />

... Rights ="none"没有帮助. ...pattern="LABEL"是不必要的。 虽然我不使用大的png文件(只有~1 Mb),但内存限制的一些更改也是必要的:

<policy domain="resource" name="memory" value="2GiB"/>

(而不是256Mib),并且

<policy domain="resource" name="area" value="2GB"/>

(不是128 MB)

其他回答

删除/etc/ imagemagick /policy.xml文件即可。如。

rm /etc/<ImageMagick_PATH>/policy.xml

对于ImageMagick 6,它是:

sudo rm /etc/ImageMagick-6/policy.xml

如果有人需要在安装后用一个命令来完成,运行这个!

sed -i 's/<policy domain="coder" rights="none" pattern="PDF" \/>/<policy domain="coder" rights="read|write" pattern="PDF" \/>/g' /etc/ImageMagick-6/policy.xml

我也有错误error/constitute.c/ReadImage/453时,试图转换eps与图像魔术gif。我尝试了sNICkerssss提出的解决方案,但仍然有错误(尽管与第一个不同)e error/ construct .c/ReadImage/412 解决这个问题的方法是将read放到其他条目中

 <policy domain="coder" rights="read" pattern="PS" />
 <policy domain="coder" rights="read" pattern="EPS" />
 <policy domain="coder" rights="read" pattern="PDF" />
 <policy domain="coder" rights="read" pattern="XPS" />
 <policy domain="coder" rights="read|write" pattern="LABEL" />

注意:这个和其他答案中的解决方案涉及禁用用于修复任意代码执行漏洞的安全措施。例如,请看这个与ghostscript相关的公告和这个与ubuntu相关的公告。只有当要转换的输入来自可信来源时,才使用这些解决方案。

我使用ImageMagick在php (v.7.1)切片PDF文件的图像。

首先,我得到了如下错误:

异常类型:ImagickException 异常信息:未授权.....@错误/ constitute.c / ReadImage / 412

在/etc/ imagemagick -6/policy.xml中进行了一些更改后,我开始得到如下错误:

异常类型:ImagickException 异常信息:无法创建临时文件.....@ error/pdf.c/ReadPDFImage/465拒绝权限

我的解决办法:

文件/etc/ imagemagick -6/policy.xml(或/etc/ imagemagick /policy.xml)

注释行 <!——<policy domain="coder" rights="none" pattern="MVG" />——> . 改变行 <policy domain="coder" rights="none" pattern="PDF" /> 来 <policy domain="coder" rights="read|write" pattern="PDF" /> 添加一行 <policy domain="coder" rights="read|write" pattern="LABEL" />

然后重新启动web服务器(nginx, apache)。

在阅读了这里的一些建议并结合这些想法后,对我来说,以下修改/etc/ imagemagick -6/policy.xml是必要的:

<policy domain="coder" rights="read|write" pattern="PDF" />

... Rights ="none"没有帮助. ...pattern="LABEL"是不必要的。 虽然我不使用大的png文件(只有~1 Mb),但内存限制的一些更改也是必要的:

<policy domain="resource" name="memory" value="2GiB"/>

(而不是256Mib),并且

<policy domain="resource" name="area" value="2GB"/>

(不是128 MB)