php pdf转图片
#php Imagick pdf转图片
最近公司做一个附件管理,需要上传pdf转图片,上网查了一大堆资料,顺利的安装好,并转图片成功,中间也走过很多坑,所以记录下来,供大家参考。
安装imagick扩展之前先要了解下ImageMagick和ghostscript 的关系:

1、安装编译工具
yum install wget make gcc gcc-c++ gtk±devel zlib-devel openssl openssl-devel pcre-devel kernel keyutils patch perl
2、安装ghostscript
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
3、安装ImageMagick
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/ #设置环境变量
4、安装imagick
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 #安装
5、php加载imagick扩展
#vi /etc/php.ini
extension=“imagick.so”
#:wq! #保存退出
6、重新加载php-fpm
#service php-fpm reload
如果是apache 则 #service httpd restart
7、测试
- 在代码中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,图片的质量还是可以的,至此就大功告成了。
ps:有兴趣的可以关注下我的公众号和小程序,谢谢啦~~


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
