php 安装imagic扩展及服务
https://www.cnblogs.com/jinxiblog/p/8053008.html
最近的PHP项目中,需要用到切图和缩图的效果,在本地windows开发环境,安装过程遇到好多问题,在此与大家分享。
php官网里,一大群老外也看不懂这玩意怎么装,主要原因在于,php版本庞杂,还有x86 x64 nts ts,对应的imagick版本也不一定相同,imagick第一道关还算容易,总还是有办法装上,imagick对应的ImageMagick程序又不一定了,又出现庞杂的版本,即使官网给出的依赖版本也没有效果,同时也没有官方任何地方给出一个合理的安装方法,真是变态。从中文到英文,从php文档到百度、谷歌资料,各种版本,全是坑!
使用环境
安装步骤
根据环境下载合适的 imagick扩展 和 imagemagick程序
1.下载拓展
下载地址一: http://windows.php.net/downloads/pecl/releases/imagick/
下载地址二: https://pecl.php.net/package/imagick
要点: 注意对应php版本 ts还是nts x86还是x64
这里以phpinfo()为准
所以我应该下载imagick 3.4.3版本 PHP5.6 Non Thread Safe (NTS) x86 的拓展——php_imagick-3.4.3-5.6-nts-vc11-x86.zip
2. 安装拓展
- 解压上述文件后,将php_imagick.dll复制到php/ext目录,或者其他你的存放拓展的目录
- 修改php.ini 加上extension=php_imagick.dll,注意php可能有多个ini,以phpinfo为准
- 此时复制解压上述文件目录中其他dll到php目录,重启apache,此时phpinfo显示拓展安装成功,但是 ImageMagick number of supported formats为0,到这里成功安装了一半
注意,如果安装后还是找不到imagic扩展或者phpinfo()中不显示的话:
来源:https://newsn.net/say/php-imagick.html
启后,刷新phpinfo()
页面,发现:没有效果,加载失败!那么,究竟是为什么呢?
如果没有显示相关扩展信息,在运行imagemagick
相关代码的时候,就可能会碰到下面的错误信息输出:
特别配置【不同于其他扩展】
在php-imagick
扩展压缩包中,除了php_imagick.dll
外,还有其它一堆.dll
文件。【重点来了】,这些文件要放置在特殊位置,这个php_imagick.dll
才能最终加载成功。经过无数次实验,这个可以生效的位置是:
php
根目录下面,也就是php.exe
的同级目录下面。【推荐】- 系统目录,比如
system32
目录下面。 - 系统环境变量
path
下的自定义目录下面,注意一定需要【系统环境变量】,而不是用户环境变量。而且环境变量的生效,是需要读取和刷新的时机的,所以出错的概率比较大。
刷新phpinfo()
页面,就可以显示该扩展加载成功!
3 下载imagemagick程序
下载地址:http://windows.php.net/downloads/pecl/deps/
imagemagick还有官网下载,此处不鼓励从imagemagick官方下载,他们的网站上我并没有找到历史版本下载,安装失败的几率很大
下载与phpinfo提示一致的版本,此时需要注意 1.软件版本对应 2.vc11还是vc14 3.x86还是x64 都要以phpinfo为准,我的
所以我下载 ImageMagick-6.9.3-7
4 安装imagemagick程序
- 下载的文件解压后,将程序整体复制到无空格 无中文字符的目录中 E:\Program Files (x86)\
- 配置环境变量,在“此电脑”右键“属性”,以此点击“高级” “环境变量” ,在 “系统变量”中找到键为path的数据,双击path,选择“新建”,将刚刚放程序的目录“E:\Program Files (x86)\ImageMagick\bin”填入即可
- 将“E:\Program Files (x86)\ImageMagick\bin”目录中的所有的以“.DLL‘为后缀的文件放入php的根目录,应该有145个
重启计算机
错误信息1:
FailedToExecuteCommand `"gs" -sstdout=%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pngalpha" -dTextAlphaBits=4 -dGraphicsAlphaBits=4 "-r72x72" -dPrinted=false "-sOutputFile=C:/Users/84660/AppData/Local/Temp/magick-Ur8OfJdJ8WzKRKRp1M3pYsWnK1tB2l5E%d" "-fC:/Users/84660/AppData/Local/Temp/magick-_EVrlnoxRn8PG1KhwRJpXlx5LH75faSf" "-fC:/Users/84660/AppData/Local/Temp/magick-um7P_A9UfXcWekoVfCF-Eb7HBYgVz59m"' (ϵͳ�Ҳ���ָ�����ļ���
) @ error/delegate.c/ExternalDelegateCommand/516 {"exception":"[object] (ImagickException(code: 415): FailedToExecuteCommand `\"gs\" -sstdout=%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 \"-sDEVICE=pngalpha\" -dTextAlphaBits=4 -dGraphicsAlphaBits=4 \"-r72x72\" -dPrinted=false \"-sOutputFile=C:/Users/84660/AppData/Local/Temp/magick-Ur8OfJdJ8WzKRKRp1M3pYsWnK1tB2l5E%d\" \"-fC:/Users/84660/AppData/Local/Temp/magick-_EVrlnoxRn8PG1KhwRJpXlx5LH75faSf\" \"-fC:/Users/84660/AppData/Local/Temp/magick-um7P_A9UfXcWekoVfCF-Eb7HBYgVz59m\"' (ϵͳ�Ҳ���ָ�����ļ���
) @ error/delegate.c/ExternalDelegateCommand/516
这个错误通常是由于Imagick无法找到Ghostscript(gs)而引起的。Ghostscript是Imagick用于处理PDF文件的依赖程序。要解决这个问题,你需要确保Ghostscript已经安装并且在系统的环境变量中。你可以按照以下步骤来解决这个问题:
-
首先,确保你已经安装了Ghostscript。你可以从Ghostscript的官方网站下载并安装它:https://www.ghostscript.com/download.html
-
安装完成后,将Ghostscript的安装目录添加到系统的环境变量中。这样Imagick才能找到Ghostscript。
-
重新运行你的PHP代码,应该就不会再出现这个错误了
错误信息2: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/413 {"exception":"[object]
1. Edit the ImageMagick policy file :
/etc/ImageMagick-6/policy.xml
2. Locate the following lines (usually at the very bottom of the file, around lines 89 to 95) :
<!-- disable ghostscript format types --> <policy domain="coder" rights="none" pattern="PS" /> <policy domain="coder" rights="none" pattern="PS2" /> <policy domain="coder" rights="none" pattern="PS3" /> <policy domain="coder" rights="none" pattern="EPS" /> <policy domain="coder" rights="none" pattern="PDF" /> <policy domain="coder" rights="none" pattern="XPS" />
3. Comment or remove those entries and restart the Web server service.
或者其他方案试试:
Imagemagick的安全策略似乎不允许我执行从pdf到png的转换。 转换其他扩展名似乎是可行的,只是不能使用pdf。 自从安装以来,我还没有更改任何imagemagick设置...如果操作系统很重要,我正在使用Arch Linux
1
2 3 |
user@machine $ convert -density 300 -depth 8 -quality 90 input.pdf output.png
convert: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408. convert: no images defined `output.png' @ error/convert.c/ConvertImageCommand/3288. |
- 未经授权将ImageMagick复制为PDF到图像
好吧,我加了
1
|
<policy domain="coder" rights="read | write" pattern="PDF" />
|
在/etc/ImageMagick-7/policy.xml中的之前,这使其可以再次工作,但不确定其安全性。
posted on 2024-01-30 11:53 andydaopeng 阅读(307) 评论(0) 编辑 收藏 举报