zoukankan      html  css  js  c++  java
  • php 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、测试

    1. 在代码中phpinfo();
    2. 命令行中 php -m
      都可以查看到是否安装成功扩展,有imagick说明安装成功

    可能出现的错误

    1. 我之前安装过很多次都提示安装失败,安装完imagick后没有任何提示,从网上搜索了一下,还有一种方法安装,通过pecl安装imagick扩展,代码如下:
      pecl install imagick

    2. 在安装过程中出现错误,一般是由于缺少编译工具包导致,可根据提示参照第一步安装相应的工具包即可,可能还需要安装libpng,libjpeg

    3. 安装好了,可能pdf转的图片格式也不是都可以转的,需要进入imagick目录,用命令行查看一下可以转的格式支不支持,命令如下:
      convert -list format
      没有对应的格式就需要重新安装版本了

    4. 安装好了,需要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,图片的质量还是可以的,至此就大功告成了。

  • 相关阅读:
    【AMAD】django-channels -- 为Django带来异步开发
    【AMAD】django-crispy-forms -- 不要再重复编写Django Form了!
    【AMAD】django-compressor -- 将JS和CSS文件压缩为一个缓存文件
    【AMAD]django-filter -- 一个通用的,基于用户选择的Django Queryset 过滤系统
    【AMAD】django-taggit -- 一个简单的,通用的django tagging模块
    【AMAD】django-debug-toolbar -- 一个可配置的panel,展示当前request/response的debug信息
    【amad】cookiecutter -- 一个命令行工具,使用项目模版来构建项目
    十步学习法 -- 来自<<软技能>>一书的学习方法论
    第八篇、SVN在Mac上使用
    第七篇、Nginx Install On Mac
  • 原文地址:https://www.cnblogs.com/liliuguang/p/12908674.html
Copyright © 2011-2022 走看看