(详细)CentOS 7+环境下PHP使用Imagick+ghostscript将PDF文件转为图片
如题,博主今天遇到个业务问题,需要对用户上传的PDF文件转png操作,其实就是个首页预览功能,不细说了。
首先,作为一个懒人,遇到新的问题我首先想的是这个坑我还是不亲自去踩了,机制的google了一发,发现很多人写的教程,大喜。前人艰难填坑后人一路坦途,但是理想和现实总是有差距的,各个博主众说纷纭,还有好几年前的过期博文,按他们铺的路走差点没把自己埋坑里。不得已又自己来踩坑了,我尽量把我的过程写的详细,为后人提供参考,但是我懒,233333,你们懂得。
对于什么是Imagick大家可能比较陌生,但是ImageMagick大家说不定还是有点了解的,imagick其实就是ImageMagick的php扩展,有非官方说法:Imagick的新能比GD要优越不少,博主比较懒,就没去具体测试了,有兴趣的同学可以自己研究一下。
相关地址集合:
php官方文档: http://php.net/manual/en/book.imagick.php
ghostscript官网: https://www.ghostscript.com
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://www.ghostscript.com/download/gsdnld.html
博主比较懒,不想编译安装了,直接下载了编译后的可执行程序,能有就行,23333
我选的是这个,看起来是免费的屌丝版,能用就行,233333
这个下载地址被重定向了好多次,没法直接给你们贴上,不过我传到了我的七牛云上,地址给大家共享下:
https://file.mumov.com/ghostscript-9.22-linux-x86_64.tgz
下载到服务器,解压,进入文件夹:
完了之后记得给gs的可执行文件copy一份到/usr/bin目录下,这样就可以全局执行了
命令行在图里,懒,不写了
到这里基本上就完成了所有模块的安装,试试pdf转png行不行
很好,没有报错,转成了png图片了,下面终于可以写代码了
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; } }
好了,到这里结束了,博主自认为写的比其他的可能要清除那么一丢丢,如果有疑问,欢迎留言喷我,23333
(详细)CentOS 7+环境下PHP使用Imagick+ghostscript将PDF文件转为图片相关推荐
- CentOS 7+环境下PHP使用Imagick+ghostscript将PDF文件转为图片
原文详细地址:https://blog.csdn.net/liangxun0712/article/details/79584016 php官方文档: http://php.net/manual/en ...
- hp ux安装mysql5.1.56_详细讲解Linux环境下MySQL5.1安装步骤
1.下载MySQL免安装版/二进制版软件(不用编译) 文件格式:MYSQL-VERSION-OS.tar.gz 2.创建MySQL组,建立MySQL用户并加入到mysql组中 (不同版本的Unix中, ...
- Centos 7 环境下将修改后的MAC地址永久保存
Centos 7 环境下将修改后的MAC地址永久保存的正确的步骤如下: #ifconfig eth0 down #vim /etc/sysconfig/network-scripts/ifcfg-et ...
- centos docker环境下如何清理磁盘空间
Docker 容器磁盘占用100%(/data/docker/overlay2空间占用显示) overlay 40G 40G 0G 100% /var/lib/docker/overlay2/{id} ...
- CentOS 8环境下GitBlit安装部署
目录: 一.安装jdk 二.GlitBli搭建 三.Git搭建 阅读本文前建议先阅读另一篇关于Windows环境下的GitBlit部署,之后在Linux上会熟练很多哦(⊙o⊙).传送门:Windows ...
- LINUX环境下资源下载中文目录及中文文件名称问题
为什么80%的码农都做不了架构师?>>> http://www.yeeach.com/2009/04/09/linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E ...
- Windows环境下如何方便快捷的执行jar文件
Windows环境下如何方便快捷的执行jar文件 1 介绍 后缀文件为.jar的文件是java的打包文件,通常包含的是一个完整的java应用程序.在Windows环境下面获取的软件如果是jar文件,最 ...
- 在Virtualbox环境下win10与虚拟机通过FileZilla传输文件(FTP传输)
在Virtualbox环境下win10与虚拟机通过FileZilla传输文件(FTP传输) 使用FileZilla传输文件(FTP传输)好处 什么是FTP传输 需要的环境以及软件等 使用FileZil ...
- Java8环境下使用restTemplate单/多线程下载大文件和小文件
Java8环境下使用restTemplate单/多线程下载大文件和小文件 0. 准备工作 1. 简单的下载文件 2. 单线程大文件下载 3. 多线程下载 0. 准备工作 下面使用的restTempla ...
最新文章
- 第一个PhoneGap程序以及错误解决
- tenantid拦截php,实现领域驱动设计。为什么在所有版本库查询中都包含TenantId?...
- shell脚本分析mysql慢查询日志(slow log)
- JDK源码解析 —— IO流中的包装类使用到了装饰者模式
- 使用FileSystemWatcher监视指定目录
- 【概率论与数理统计】如何理解自由度n?
- Gamebryo实例学习之二BackgroundLoad
- keras优化算法_自然场景文本识别(OCR),keras-yolo3-densenet-ocr
- Java文件下载/下载文件的案例
- laravel 检测sql_在Laravel PHP应用程序中轻松进行面部检测
- 基于JAVA+SpringMVC+Mybatis+MYSQL的图书馆预约占座管理系统
- Asp.net 邮件传输
- 计算机配色与人工配色原则,计算机配色的理论与实践研究
- fly.js 的二次封装
- 弧形银幕电影的成像原理
- html页面整体缩小,浏览器缩放原理以及窗口、html页面大小
- 关于oracle中ora-00600的报错
- 【大数据处理】广州餐饮店铺爬虫并可视化,上传至hdfs
- 杰克 - 鬼马海盗主角加勒比海盗系列的
- 21世纪的中国人能否看懂这个大清帝国时代的法国人(2)