安装imagick扩展之前先要了解下ImageMagick和ghostscript 的关系:
yum install wget make gcc gcc-c++ gtk±devel zlib-devel openssl openssl-devel pcre-devel kernel keyutils patch perl
wget http://downloads.ghostscript.com/public/ghostscript-9.02.tar.gz
tar zxf ghostscript-9.02.tar.gz
cd ghostscript-9.02
./configure
make
make install
cd /usr/local/src #进入软件包存放目录
wget http://www.imagemagick.org/download/ImageMagick.tar.gz #下载ImageMagick
tar zxvf ImageMagick.tar.gz #解压
cd ImageMagick-6.7.9-3 #进入安装目录
./configure --prefix=/usr/local/imagemagick #配置
make #编译
make install #安装
export PKG_CONFIG_PATH=/usr/local/imagemagick/lib/pkgconfig/ #设置环境变量
cd /usr/local/src
wget http://pecl.php.net/get/imagick-3.0.1.tgz #下载imagick
tar zxvf imagick-3.0.1.tgz
cd imagick-3.0.1
/usr/bin/phpize #用phpize生成configure配置文件 这个是我的phpize路径,可以用whereis phpize查看
./configure --with-php-config=/usr/bin/php-config --with-imagick=/usr/local/imagemagick #配置 php-config路径同上查看方式
make #编译
make install #安装
#vi /etc/php.ini
extension=“imagick.so”
#:wq! #保存退出
#service php-fpm reload
如果是apache 则 #service httpd restart
- 在代码中phpinfo();
- 命令行中 php -m
都可以查看到是否安装成功扩展,有imagick说明安装成功
可能出现的错误
-
我之前安装过很多次都提示安装失败,安装完imagick后没有任何提示,从网上搜索了一下,还有一种方法安装,通过pecl安装imagick扩展,代码如下:
pecl install imagick -
在安装过程中出现错误,一般是由于缺少编译工具包导致,可根据提示参照第一步安装相应的工具包即可,可能还需要安装libpng,libjpeg
-
安装好了,可能pdf转的图片格式也不是都可以转的,需要进入imagick目录,用命令行查看一下可以转的格式支不支持,命令如下:
convert -list format
没有对应的格式就需要重新安装版本了 -
安装好了,需要pdf转图片,代码如下
下面展示一些 代码片
。
private function _pdf2png($pdf,$path){
if(!extension_loaded('imagick')){
return false;
}
if(!file_exists($pdf)){
return false;
}
$image = new Imagick();
$image->setResolution( 300, 300 );
$image->setcompressionquality(100);
$image->readimage($pdf);
$pages = count($image);
if($pages == 0){
return false;
}
FoxCommon::createdir(Yii::app()->params['staticPath'] . $path);
foreach ($image as $k => $v){
$v->setImageFormat( "jpg" );
$fileName = $path . '/' . $k . '.jpg';
$filePath = Yii::app()->params['staticPath'] . '/' .$fileName;
if(file_exists($filePath)){
$files[] = $fileName;
}else{
if($v->writeImage($filePath) == true){
$files[] = $fileName;
};
}
}
return $files;
}
后来上传到线上,实际使用中发现,上传10兆以上的文件,转图片就很慢了,而且服务器Imagick没转图片成功会占用很多磁盘空间,就算转成功了一个图片也2到3兆,太大了,后来一查是图片转的质量的问题,下面两段代码的问题:
$image->setResolution( 300, 300 ); // 设置图像分辨率
$image->setcompressionquality(100); // 设置对象的默认压缩质量
将上面两段代码改外
$image->setResolution( 80, 80 ); // 设置图像分辨率
//$image->setcompressionquality(100); // 设置对象的默认压缩质量不设置,一个介于1和100之间的整数,1 =高压缩,100=低压缩,也可以根据自己的实际情况来
改完后转十几兆的pdf就很快了,几秒钟就行了,而且转出来的图片就几百K,图片的质量还是可以的,至此就大功告成了。