原文详细地址:https://blog.csdn.net/liangxun0712/article/details/79584016

php官方文档: http://php.net/manual/en/book.imagick.php

ghostscript下载地址:https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs926/ghostscript-9.26-linux-x86_64.tgz

ImageMagick官方下载地址:https://sourceforge.net/projects/imagemagick/files/

imagick函数中文解释:http://www.jb51.net/article/60161.htm

前提:你会编译安装php,服务器安装了c++、gcc-c++等基本库

1 安装ImageMagick
博主通过不为人知的“肮脏”手段拿到了下载地址,直接在服务器上下载了源码包:
下载地址: https://netix.dl.sourceforge.net/project/imagemagick/im7-src/ImageMagick-7.0.7-25.tar.gz

下载命令:

wget https://netix.dl.sourceforge.net/project/imagemagick/im7-src/ImageMagick-7.0.7-25.tar.gz

运行截图如下,我先进入了/home/app目录下,所以文件也下载在这里

下载完成后使用下面的命令解压:

tar -zxvf ImageMagick-7.0.7-25.tar.gz

解压完毕后进入该文件夹:

执行命令(默认参数,没有更改)

./configure

执行完了后如下图所示,默认安装路径在/usr/local下

执行命令,编译并安装ImageMagick,需要一段时间,不如先来一局农药压压惊。或者你可以另开一个terminal连接服务器开始安装别的东西。

make && make install

完成之后进入安装文件夹,查看ImageMagick是否工作

cd /usr/local/bin/

./convert -version

结果如下:

2 安装PHP扩展Imagick.so
很遗憾,这不是php官方的标准包,所以没有继承在php源码包里面,我在ext/文件夹下没有找到,不过官方文档给出了下载页面地址:

http://pecl.php.net/package/imagick/download

然而机智的我又直接把扩展包的下载地址贴上来了,方便服务器下载:http://pecl.php.net/get/imagick-3.4.3.tgz

我很懒,命令行在图里,同学自己看了==

解压后进入该目录,执行phpize,我希望你能找到你的phpize在哪,如果你是编译安装的话,如果没有软链到/usr/bin/目录下,你可以使用绝对路径调用phpize。使用下面命令行配置扩展安装,指定--with-php-config是为了统一管理我的extension.so,如果不指定,你也可以copy到php.ini指定的extension位置,--with-imagick默认是/usr/local如果你没改动的话。

./configure --with-php-config=/usr/local/php7/bin/php-config --with-imagick=/usr/local

配置完成后 编译安装,是的,又是 make && make install

这些路径很重要,有时候自己清楚点比较好

安装完了后我们要修改php的配置文件,添加上imagick.so,重启php-fpm

修改配置文件,记得保存

kill php-fpm主进程 并 重启,这里各个人方法不同,我按我的演示一下:

重启完了看看自己的phpinfo吧,已经有了

这个时候我们试试pdf转png

以失败告终,控制台的测试都失败了别说用php的系统调用了,一样gg,大部分国内博客的教程基本到此为止,然后就开始贴代码了,我特么就想喷一句,代码格式都乱七八糟的,到底是你写的还是copy的?关键时候还是overstack靠谱。看上面截图提示的错误信息:

convert: FailedToExecuteCommand `'gs' -sstdout=%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 '-sDEVICE=pngalpha' -dTextAlphaBits=4 -dGraphicsAlphaBits=4 '-r72x72'  '-sOutputFile=/tmp/magick-26757KhSit2bKyfwa%d' '-f/tmp/magick-26757lL6cdz2j5VDZ' '-f/tmp/magick-26757SnLQ7f7amJLO'' (1) @ error/pdf.c/InvokePDFDelegate/291.

convert: no images defined `%d.png' @ error/convert.c/ConvertImageCommand/3275.

带有gs 开头的命令行执行失败,gs其实就是下面要说的ghostscript

3 安装GhostScript 
官方地址:https://www.ghostscript.com/

使用教程:https://www.ghostscript.com/doc/9.22/Use.htm

官方安装教程: https://www.ghostscript.com/doc/9.22/Install.htm

下载地址: https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs926/ghostscript-9.26-linux-x86_64.tgz

博主比较懒,不想编译安装了,直接下载了编译后的可执行程序,能有就行,23333

我选的是这个,看起来是免费的屌丝版,能用就行,233333

这个下载地址被重定向了好多次,没法直接给你们贴上,不过我传到了我的七牛云上,地址给大家共享下:

https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs926/ghostscript-9.26-linux-x86_64.tgz

下载到服务器,解压,进入文件夹:

完了之后记得给gs的可执行文件copy一份到/usr/bin目录下,这样就可以全局执行了

命令行在图里,懒,不写了

到这里基本上就完成了所有模块的安装,试试pdf转png行不行

很好,没有报错,转成了png图片了,下面终于可以写代码了

相关文档: http://docs.wand-py.org/en/0.4.0/guide/install.html#install-imagemagick-on-mac

让ImageMagick支持png和jpeg格式

首先我们安装所需的库文件.

1

$ yum install tcl-devel libpng-devel libjpeg-devel ghostscript-devel bzip2-devel freetype-devel libtiff-devel

进入ImageMagick的下载解压后的目录,重新配置,并编译安装.

1

2

3

4

5

$ ./configure --with-bzlib=yes --with-fontconfig=yes --with-freetype=yes --with-gslib=yes --with-gvc=yes --with-jpeg=yes --with-jp2=yes --with-png=yes --with-tiff=yes

make clean

make

make install

4 PHP代码实现pdf转图片
我懒,原谅我直接贴代码了

class ImageMagick{

private $handler;
    public function __construct()
    {
        $this->handler = new \Imagick();
    }

/**将pdf转为png图片列表
     * @param $pdf_path string pdf文件的绝对路径
     * @param $out_path string 生成图片存放位置的绝对路径
     * @param int $from int  从第几页开始转
     * @param int $to int 截止于第几页
     * @return array
     * @throws SystemInnerException
     */
    public function convertPdf2Images($pdf_path,$out_path,$from=1,$to=1)
    {
        $this->handler->setResolution(120,120);
        $this->handler->setCompressionQuality(50);
        $this->handler->readImage($pdf_path);
        $pages = count($this->handler);
        if($pages == 0)
            throw new SystemInnerException('empty pdf file!');
        $index = 1;

$data = [];
        foreach ($this->handler as $k=>$v)
        {
            if($index == $from)
            {
                if($from<=$to) {

$v->setImageFormat('jpg');
                    $tmp_name = str_random('16') . '.jpg';
                    if ($v->writeImage($out_path.$tmp_name) == true)
                        $data[] = $tmp_name;
                    $index++;
                    $from++;
                }else
                    break;
            }else
                $index++;
        }

return $data;
    }
}

原文:https://blog.csdn.net/liangxun0712/article/details/79584016

CentOS 7+环境下PHP使用Imagick+ghostscript将PDF文件转为图片相关推荐

  1. (详细)CentOS 7+环境下PHP使用Imagick+ghostscript将PDF文件转为图片

    如题,博主今天遇到个业务问题,需要对用户上传的PDF文件转png操作,其实就是个首页预览功能,不细说了. 首先,作为一个懒人,遇到新的问题我首先想的是这个坑我还是不亲自去踩了,机制的google了一发 ...

  2. Centos 7 环境下将修改后的MAC地址永久保存

    Centos 7 环境下将修改后的MAC地址永久保存的正确的步骤如下: #ifconfig eth0 down #vim /etc/sysconfig/network-scripts/ifcfg-et ...

  3. centos docker环境下如何清理磁盘空间

    Docker 容器磁盘占用100%(/data/docker/overlay2空间占用显示) overlay 40G 40G 0G 100% /var/lib/docker/overlay2/{id} ...

  4. CentOS 8环境下GitBlit安装部署

    目录: 一.安装jdk 二.GlitBli搭建 三.Git搭建 阅读本文前建议先阅读另一篇关于Windows环境下的GitBlit部署,之后在Linux上会熟练很多哦(⊙o⊙).传送门:Windows ...

  5. LINUX环境下资源下载中文目录及中文文件名称问题

    为什么80%的码农都做不了架构师?>>>    http://www.yeeach.com/2009/04/09/linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E ...

  6. Windows环境下如何方便快捷的执行jar文件

    Windows环境下如何方便快捷的执行jar文件 1 介绍 后缀文件为.jar的文件是java的打包文件,通常包含的是一个完整的java应用程序.在Windows环境下面获取的软件如果是jar文件,最 ...

  7. 在Virtualbox环境下win10与虚拟机通过FileZilla传输文件(FTP传输)

    在Virtualbox环境下win10与虚拟机通过FileZilla传输文件(FTP传输) 使用FileZilla传输文件(FTP传输)好处 什么是FTP传输 需要的环境以及软件等 使用FileZil ...

  8. Java8环境下使用restTemplate单/多线程下载大文件和小文件

    Java8环境下使用restTemplate单/多线程下载大文件和小文件 0. 准备工作 1. 简单的下载文件 2. 单线程大文件下载 3. 多线程下载 0. 准备工作 下面使用的restTempla ...

  9. Hadoop环境下用java代码实现hdfs远程文件的上传和下载

    Hadoop环境下用java代码实现hdfs远程文件的上传和下载 文章目录 Hadoop环境下用java代码实现hdfs远程文件的上传和下载 一.新建maven工程 二.文件的上传 三.文件的下载 四 ...

最新文章

  1. 动态规划之数字三角形模型
  2. 移动前端开发基础与优化
  3. input输入框获取焦点时,光标置于最右
  4. 《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·007【简单查询】
  5. mysql数据库事件不执行_【数据库】mysql查看事件是否执行
  6. java日期互转:LocalDateTime、String、Instant、Date
  7. 接口测试及服务器性能压测,接口测试及服务器性能压测
  8. MyCat分片规则之取模范围分片
  9. 简单的网页制作期末作业
  10. libopus 实现pcm 编码到opus
  11. Intel早期的CPU和现在MCU相比,表现如何?
  12. java实现九九乘法表
  13. Linux下的SD卡分区--解决sd卡分区损坏
  14. 山地车的结构及骑行注意事项
  15. RedHat/CentOS 服务器 SSH 密钥交换实验(实现SSH密钥认证)
  16. CAD等高线转地形高程散点
  17. 暴雪修改手机500服务器错误,网站http服务器内部500错误的解决方法 [图文]
  18. linux-centos8安装nginx
  19. 7、树莓派音频——jackd进阶篇
  20. Qter 开发资源大集合

热门文章

  1. 世界各国面积排名国家国土面积 (万平方公里)
  2. MATLAB高光谱图像处理基础
  3. 埃森哲java开发怎么样_技术丨埃森哲Data Privacy 、商汤科技、平安科技人工智能(AI)类日常实习...
  4. WebMatrix 简介
  5. linux nvidia显卡参数设置,硬件设置 – Nvidia显卡 - Linux Mint 学习笔记
  6. no-cache,max-age=0,nostore区别及304原理
  7. zend gard加密过期
  8. VMware Workstation 安装 CentOS-7 (1804) 教程
  9. ESP32固件安装和基础测试
  10. bulk es 删除_es数据导出导入(bulk篇)