ick安装之ImagPHP扩展

虚拟机Linux环境环境:

Php: 7.3.0

Nginx: 1.14.2

MariaDB: 10.2.19

1、安装编译工具

1yum 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类型的

1588689588100463

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.orgCopyright: © 1999-2020 ImageMagick Studio LLCLicense: https://imagemagick.org/script/license.phpFeatures: 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 phpizephpize: /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.iniextension=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 ~]$ lltotal 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.指定图片宽高--缩略图

1234567891011121)、默认时,宽度和高度表示要最终需要转换图像的最大尺寸,同时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.png2)、如果需要转换成600×600,而图片无需保持原有比例,可以在宽高后面加上一个感叹号!.[root@192 ~]$ /usr/local/ImageMagick/bin/convert  -resize 600x600!  1.pdf 7.png3)、 默认都是使用像素作为单位,也可以使用百分比来形象图片的缩放【比例计算后缩放,不保持原有比例】[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.拼接

12345671)、多页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.缩小图片尺寸

123456789101112131415161718192021222324252627282930313233Header("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;
上一篇:卤肉的正确做法3个条件缺一不可 少一个都会失败
下一篇:蘑菇不熟吃了有毒吗 蘑菇没煮熟会中毒吗