虚拟机Linux环境环境:
Php: 7.3.0
Nginx: 1.14.2
MariaDB: 10.2.19
1、安装编译工具
1 | yum install wget make gcc gcc-c++ gtk±devel zlib-devel openssl openssl-devel pcre-devel kernel keyutils patch perl |
2、安装ghostscript
下载地址:https://www.ghostscript.com/download/gsdnld.html
我选择的这个Ghostscript 9.52 Sourcefor all platforms类型的
12345 | [root@192 ~] # wget https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs952/ghostscript-9.52.tar.gz [root@192 ~] # tar -zxvf ghostscript-9.52.tar.gz [root@192 ~] # cd ghostscript-9.52/ [root@192 ghostscript-9.52] # ./configure [root@192 ghostscript-9.52] # make && make install |
3、安装ImageMagick
下载地址:https://imagemagick.org/script/install-source.php
1234567891011121314151617 | [root@192 ~] # wget -O ImageMagick.tar.gz https://imagemagick.org/download/ImageMagick.tar.gz [root@192 ~] # tar zxvf ImageMagick.tar.gz [root@192 ~] # cd ImageMagick-7.0.10-10/ [root@192 ImageMagick-7.0.10-10] # ./configure --prefix=/usr/local/imagemagick [root@192 ImageMagick-7.0.10-10] # make && make install ..... ..... make [2]: 离开目录“ /root/ImageMagick-7 .0.10-10” make [1]: 离开目录“ /root/ImageMagick-7 .0.10-10” [root@192 ImageMagick-7.0.10-10] # /usr/local/imagemagick/bin/convert -version #查看一下 Version: ImageMagick 7.0.10-10 Q16 x86_64 2020-05-04 https: //imagemagick .org Copyright: © 1999-2020 ImageMagick Studio LLC License: https: //imagemagick .org /script/license .php Features: Cipher DPC HDRI OpenMP(3.1) Delegates (built- in ): bzlib freetype jng jpeg lzma png x xml zlib [root@192 ImageMagick-7.0.10-10] # [root@192 ImageMagick-7.0.10-10] # /usr/local/imagemagick/bin/convert logo: logo.gif #测试ImageMagick是否可以正常运行: |
4、安装imagick
下载地址:https://pecl.php.net/package/imagick
123456789101112131415161718192021222324252627282930313233 | [root@192 ~] # wget -O imagick-3.4.4.tgz https://pecl.php.net/get/imagick-3.4.4.tgz [root@192 ~] # tar -zxvf imagick-3.4.4.tgz [root@192 ~] # cd imagick-3.4.4/ [root@192 imagick-3.4.4] # /usr/local/php7/bin/phpize #用phpize生成configure配置文件 这个是我的phpize路径,可以用whereis phpize查看 [root@192 imagick-3.4.4] # whereis phpize phpize: /usr/local/php7/bin/phpize [root@192 imagick-3.4.4] # ./configure --with-php-config=/usr/local/php7/bin/php-config --with-imagick=/usr/local/imagemagick #配置编译 php-config路径同上查看方式 [root@192 imagick-3.4.4] # make && make install ...... Build complete. Don 't forget to run ' make test '. Installing shared extensions: /usr/local/php7/lib/php/extensions/no-debug-non-zts-20180731/ Installing header files: /usr/local/php7/include/php/ [root@192 imagick-3.4.4] # cd /usr/local/php7/lib/php/extensions/no-debug-non-zts-20180731/ [root@192 no-debug-non-zts-20180731] # ll 总用量 9960 -rwxr-xr-x 1 root root 1190896 5月 4 21:31 imagick.so -rwxr-xr-x 1 root root 4208386 12月 22 2018 opcache.a -rwxr-xr-x 1 root root 2276080 12月 22 2018 opcache.so -rwxr-xr-x 1 root root 2515536 3月 7 2019 redis.so [root@192 no-debug-non-zts-20180731] # php加载imagick扩展 [root@192 no-debug-non-zts-20180731] # vim /usr/local/php7/etc/php.ini extension=imagick 重新加载php-fpm [root@192 no-debug-non-zts-20180731] # systemctl restart php-fpm.service 测试 1.在代码中phpinfo(); 2.命令行中 php -m 都可以查看到是否安装成功扩展,有imagick说明安装成功 |
可能出现的错误:
1.安装好了,可能pdf转的图片格式也不是都可以转的,需要进入imagick目录,用命令行查看一下可以转的格式支不支持,命令如下:
1 | [root@192 ~] # /usr/local/imagemagick/bin/convert -list format |
没有对应的格式就需要重新安装版本了.
2. 目录要有写的权限,否则命令行下可以执行成功; 并且exec权限有(调简单的命令也可以打印出来), 就是转换不了图片
php调用命令行实现pdf转图片
12345678910111213 | $retval = 1; // exec () might be disabled $cmd = "/usr/local/imagemagick/bin/convert /usr/local/nginx/html/www.ck.com/more.pdf /usr/local/nginx/html/www.ck.com/%d.png" ; if (function_exists( 'exec' )){ echo 2222; @ exec ($cmd, $output, $retval); var_dump($output); } // Did it work? if ($retval > 0){ exit ( 'process_failed' ); } echo 111111; |
命令行常用命令:
1.多页pdf自动转多个png
1234567891011121314 | [root@192 ~]$ /usr/local/ImageMagick/bin/convert more .pdf 1.png [root@192 ~]$ ll total 572 -rw-r--r-- 1 cuikai default 28101 Apr 30 15:13 1-0.png -rw-r--r-- 1 cuikai default 27776 Apr 30 15:13 1-1.png -rw-r--r-- 1 cuikai default 26298 Apr 30 15:13 1-2.png -rw-r--r-- 1 cuikai default 22976 Apr 30 15:13 1-3.png -rw-r--r-- 1 cuikai default 16442 Apr 30 15:13 1-4.png -rw-r--r-- 1 cuikai default 18726 Apr 30 15:13 1-5.png -rw-r--r-- 1 cuikai default 20221 Apr 30 15:13 1-6.png -rw-r--r-- 1 cuikai default 82297 Apr 30 15:13 1-7.png -rw-r--r-- 1 cuikai default 24507 Apr 30 15:13 1-8.png -rw-r--r-- 1 cuikai default 57942 Apr 30 14:46 1.pdf -rw-r--r-- 1 cuikai default 240521 Feb 22 20:56 more .pdf |
2.指定pdf页码转图片
1234 | [root@192 ~]$ /usr/local/ImageMagick/bin/convert more .pdf[0] 1.png 参数: [0] --为第一页 [1] --为第二页 |
3.指定图片宽高--缩略图
123456789101112 | 1)、默认时,宽度和高度表示要最终需要转换图像的最大尺寸,同时Convert会控制图片的宽和高,保证图片按比例进行缩放。 [root@192 ~]$ /usr/local/ImageMagick/bin/convert -resize 357x842 1.pdf 4.png 等效于: 只指定高度,图片会转换成指定的高度值,而宽度会按原始图片比例进行转换 [root@192 ~]$ /usr/local/ImageMagick/bin/convert -resize 357 1.pdf 5.png 2)、如果需要转换成600×600,而图片无需保持原有比例,可以在宽高后面加上一个感叹号!. [root@192 ~]$ /usr/local/ImageMagick/bin/convert -resize 600x600! 1.pdf 7.png 3)、 默认都是使用像素作为单位,也可以使用百分比来形象图片的缩放【比例计算后缩放,不保持原有比例】 [root@192 ~]$ /usr/local/ImageMagick/bin/convert -resize 60%x60% 1.pdf 2.png |
4.白色背景(白色透明的pdf背景文件才有效)
1234 | [root@192 ~]$ /usr/local/ImageMagick/bin/convert -background white -flatten 1.pdf 2.png 参数: -background white -flatten 白色背景 |
5.设置分辨率--提高转换清晰度
1234 | [root@192 ~]$ /usr/local/ImageMagick/bin/convert -density 200 - units PixelsPerInch 1.pdf 11.png 参数: -density 200 - units PixelsPerInch,其中,200就是宽高的分辨率,值越高越清晰,转出的图片越大。 -density 300 图像每英寸面积内的像素点数,数值越高图片质量越高 |
6.不压缩
1234 | [root@192 ~]$ /usr/local/ImageMagick/bin/convert -quality 100 1.pdf 13.png 这个为转换png时的压缩率,100表示不压缩 参数: -quality 100 这个为转换png时的压缩率,100表示不压缩 |
7.拼接
1234567 | 1)、多页pdf竖向拼接成一个图片 [root@192 ~]$ /usr/local/ImageMagick/bin/convert -quality 100 -append more .pdf 17.png 参数: 多张图片不要加 -append 如果是水平横向拼接 +append 2)、水平横向拼接 [root@192 ~]$ /usr/local/ImageMagick/bin/convert -quality 100 +append more .pdf 18.png |
php代码执行:
1.PDF文件转图片
1234567891011121314151617181920212223242526272829303132333435363738394041424344 | /** * PDF2PNG * @param $pdf 待处理的PDF文件 * @param $path 待保存的图片路径 * @param $page 待导出的页面 -1为全部 0为第一页 1为第二页 * @ return 保存好的图片路径和文件名 */ function pdf2png($pdf,$path,$page=-1) { if (!extension_loaded( 'imagick' )) { return false ; } if (!file_exists($pdf)) { return false ; } $im = new Imagick(); $im->setResolution(120,120); // 设置图像分辨率 $im->setCompressionQuality(100); // 设置对象的默认压缩质量 if ($page==-1) $im->readImage($pdf); else $im->readImage($pdf. "[" .$page. "]" ); foreach ($im as $Key => $Var) { $Var->setImageFormat( 'png' ); $filename = $path. "/" . md5($Key. time ()). '.png' ; if ($Var->writeImage($filename) == true ) { $Return[] = $filename; } } return $Return; } $path= "D:/software/wamp64/www/imagick/images" ; // 请确保当前目录下有这个文件夹,由于一直要用,所以就不加检测了 $s=pdf2png( "D:/software/wamp64/www/imagick/1.pdf" ,$path); var_dump($s);die; $scount=count($s); for ($i=0;$i<$scount;$i++) { echo "<div align=center><font color=red>Page " .($i+1)."< /font > <a href=\ "" .$s[$i]. "\" target=_blank><img border=3 height=120 width=90 src=\"" .$s[$i]. "\"></a></div><p>" ; } |
2.缩小图片尺寸
123456789101112131415161718192021222324252627282930313233 | Header( "Content-type: image/jpeg" ); /** * 缩小图片尺寸. * * @param $image 待处理的二进制图片 * @param $width 处理后图片尺寸的宽度(px) * @param $height 处理后图片尺寸的高度(px) * @param $crop 是否裁剪图片 * * @ return 处理好的二进制图片 */ function resize($image, $width, $height, $crop) { $imagick = new Imagick($image); $w = $imagick->getImageWidth(); $h = $imagick->getImageHeight(); if ($w > $width || $h > $height) { if ($crop) { $imagick->cropThumbnailImage($width, $height); } else { $imagick->resizeImage($width, $height, Imagick::FILTER_LANCZOS, 1, true ); } } $processed_image = $imagick->getImageBlob(); return $processed_image; } $s=resize( "D:/software/wamp64/www/123.png" , 400, 400, 1); echo $s; |