我想创建一个验证码图片使用转换从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。
我笨。有什么建议吗?
注意:这个和其他答案中的解决方案涉及禁用用于修复任意代码执行漏洞的安全措施。例如,请看这个与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)。
注意:此解决方案和任何其他“编辑policy.xml”解决方案禁用针对ImageMagick中任意代码执行漏洞的安全措施。如果需要处理不能100%控制的输入,则应该使用不同的程序(而不是ImageMagick)。
如果您还在这里,您正在尝试编辑您完全控制、知道是安全的且用户无法编辑的图像。
yum安装了一个/etc/ imagemagick /policy.xml文件。它几乎不允许任何事情(为了安全性和保护您的系统不被ImageMagick调用重载)。
如果你得到一个ReadImage错误如上所述,你可以将行更改为:
<policy domain="coder" rights="read" pattern="LABEL" />
这应该能解决问题。
这个文件里面有很多文档,所以你应该读一下。例如,如果你需要更多的权限,你可以像这样组合它们:
<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)