先介绍 环境
Linux 2.6.32-431.23.3.el6.x86_64 #1 SMP Thu Jul 31 17:20:51 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
CentOS release 6.8 (Final)
aliyun 服务器
整个的关系图:
1. 第一遍安装 [安装部分只指出configure 参数]
初始安装 从imaggick 官网下载 source code
我安装的是 ImageMagick-7.0.7-30
./configure --prefix=/application/imagemagick
安装完成
安装 php imagick扩展 针对 apache
到http://pecl.php.net/package/imagick. 下载 我的安装版本是 imagick-3.4.1
phpize
./configure --with-php-config=/application/php/bin/php-config --with-imagick=/application/imagemagick/
然后就是配置 php.ini 文件
加上 extension = xxxx/xxxx/xx/imagick.so
重启apache 可以看到imagick 库
-----------题外话-----------
补充 mac 中我使用的是ampps 我也想安装 magick 库 来着 尽管我知道 ampps中 php 是32 位的 在编译的时候 加参数
参考 http://charles.lescampeurs.org/2013/06/18/add-c-header-include-path-pecl
但是我没有成功 知道的同学可以指导一下
---------题外话结束-----------
-------------php 部分程序 --------------------
function pdf2png($pdf, $path, $page = 0)
{
if (!is_dir($path)) {
mkdir($path, true);
}
if (!extension_loaded('imagick')) {
echo '没有找到imagick!';
return false;
}
if (!file_exists($pdf)) {
echo '没有找到pdf';
return false;
}
$im = new Imagick();
// $im->setResolution(120, 120); //设置图像分辨率
// $im->setCompressionQuality(80); //压缩比
$im->readImage($pdf . "[" . $page . "]"); //设置读取pdf的第一页
$im->setImageFormat( "jpg" );
// $im->thumbnailImage(200, 100, true); // 改变图像的大小
// $im->scaleImage(200, 100, true); //缩放大小图像
$filename = $path . "/" . time() . '.jpg';
if ($im->writeImage($filename) == true) {
$Return = $filename;
}
return $Return;
}
$s = pdf2png('demo.pdf', 'images');
echo '<div align="center"><img src="' . $s . '"></div>';
------------------------php 部分程序结束 -------------
2. 出现问题
1. php程序 读取不了pdf
报错
Fatal error
: Uncaught exception 'ImagickException' with message '
FailedToExecuteCommand
`'gs'
-sstdout=%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 '-sDEVICE=pngalpha' -dTextAlphaBits
解决方法 :
还需要 ghostscript 支持
./configure --prefix /application/ghostscript
安装完成之后
echo "export PATH=/application/ghostscript/bin:$PATH" >> /etc/profile
这个里面就有gs命令
第二遍安装
出现png decode
delegate【委托】 错误 所有
引发第二遍安装
'ImagickException' with message 'no decode delegate for this image format `PNG'
【
另外说一句
在命令行直接执行
gs -dQUIET -dNOSAFER -r300 -dBATCH -sDEVICE=pngalpha -dNOPAUSE -dNOPROMPT -sOutputFile=images/demo%d.png demo.pdf
会成功
】
php 程序 $im->readImage($pdf . "[" . $page . "]"); //设置读取pdf的第一页 会用到imagemagick 下面的 convert 命令
可以使用
convert -list format 指令查看是否有png
发现没有 png 支持
方法一
直接yum install -y libpng-devel
yum install -y libjpeg-turbo-devel
[root@jstuw8tpu3gud9 ~]# rpm -aq libpng libjpeg-turbo
libjpeg-turbo-1.2.1-3.el6_5.x86_64
libpng-1.2.49-2.el6_7.x86_64
方法二
可以到 http://www.imagemagick.org/download/delegates/ 站点下载源码 然后安装
我就偷了个懒 直接yum 安装了
重新编译 ImageMagick-7.0.7-30
多几个参数
./configure --prefix /application/imagemagick/ --enable-shared --enable-lzw --with-modules
和上面参考连接 只相差一个 “
–without-perl
” 个人觉得 少一个 不如多一个
编译出现错误
libltdl is required for modules and OpenCL builds
解决方法 安装 libltdl
支持
yum install -y libtool-ltdl-devel
最后编译结果如下
Options used to compile and link:
PREFIX = /application/imagemagick
EXEC-PREFIX = /application/imagemagick
VERSION = 7.0.7
CC = gcc -std=gnu99 -std=gnu99
CFLAGS
= -I/usr/include/libpng12 -fopenmp -g -O2 -Wall -mtune=core2 -fexceptions -pthread -DMAGICKCORE_HDRI_ENABLE=1 -DMAGICKCORE_QUANTUM_DEPTH=16
CPPFLAGS = -DMAGICKCORE_HDRI_ENABLE=1 -DMAGICKCORE_QUANTUM_DEPTH=16
PCFLAGS =
DEFS = -DHAVE_CONFIG_H
LDFLAGS =
LIBS =
CXX = g++
CXXFLAGS = -g -O2 -pthread
FEATURES = DPC HDRI Cipher OpenMP Modules
DELEGATES = mpeg jng jpeg png ps zlib
==============================================================================
貌似已经有了png
----------------------
make && make install
[root@jstuw8tpu3gud9 ImageMagick-7.0.7-30]# convert -list format | grep -i png
JNG* PNG rw- JPEG Network Graphics
See http://www.libpng.org/pub/mng/ for details about the JNG
MNG* PNG rw+ Multiple-image Network Graphics (libpng 1.2.49)
See http://www.libpng.org/pub/mng/ for details about the MNG
PNG* PNG rw- Portable Network Graphics (libpng 1.2.49)
See http://www.libpng.org/ for details about the PNG format.
PNG00* PNG rw- PNG inheriting bit-depth, color-type from original, if possible
PNG24* PNG rw- opaque or binary transparent 24-bit RGB (zlib 1.2.8,1.2.3)
PNG32* PNG rw- opaque or transparent 32-bit RGBA
PNG48* PNG rw- opaque or binary transparent 48-bit RGB
PNG64* PNG rw- opaque or transparent 64-bit RGBA
PNG8* PNG rw- 8-bit indexed with optional binary transparency
看到已经有了
最后可以通过下面方式看看
[root@jstuw8tpu3gud9 image_convert2]# identify -list configure | grep DELEGATES
DELEGATES
mpeg jng jpeg png ps zlib
[root@jstuw8tpu3gud9 image_convert2]# convert --version
Version: ImageMagick 7.0.7-30 Q16 x86_64 2018-05-07 https://www.imagemagick.org
Copyright: © 1999-2018 ImageMagick Studio LLC
License: https://www.imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules OpenMP
Delegates (built-in):
jng jpeg ltdl png zlib
此时php 程序 还有 问题 还是报 png 的问题 思前想后 最后决定重启一下apache 【解决了!!!】
所以一定要重启 apache 才能让 imagick 起作用
参考 http://php.net/manual/en/book.imagick.php
Any Problems let me Know ! Thanks !!!