PHP扩展之Imagick安装(linux)

        承接上文 PHP扩展之Imagick安装(windows)   传送时光机,本文也记录一下 linux环境下的安装和使用。

        

        虚拟机Linux环境环境:

        Php: 7.3.0

        Nginx: 1.14.2

        MariaDB: 10.2.19        



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

冷暖自知一抹茶ck

[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 

[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 

[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目录,用命令行查看一下可以转的格式支不支持,命令如下:

[root@192 ~]# /usr/local/imagemagick/bin/convert -list format

        没有对应的格式就需要重新安装版本了.

        2. 目录要有写的权限,否则命令行下可以执行成功; 并且exec权限有(调简单的命令也可以打印出来), 就是转换不了图片



        php调用命令行实现pdf转图片

$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;


        php代码执行:

        1.PDF文件转图片

/**
* 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.缩小图片尺寸

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;


冷暖自知一抹茶ck
请先登录后发表评论
  • 最新评论
  • 总共0条评论