[PHP+ImageMagick]将PDF转成图片(步骤详解)
ImageMagick安装
ImageMagick是一个免费的创建、编辑、合成图片的软件。它可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应用,图片的旋转、组合,文本,直线,多边形,椭圆,曲线,附加到图片伸展旋转。ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布,它遵守GPL许可协议,可以运行于大多数的操作系统,ImageMagick的大多数功能的使用都来源于命令行工具。
PHP中要使用ImageMagick,需要安装imagick扩展,imagick与gd扩展类似,主要用于图像处理,但是imagick的功能更强大。下面简单介绍imagick在两种常用环境中的安装方法。
CentOS 7中安装
在CentOS中可以直接使用Yum进行安装,除了安装ImageMagick,还要安装它的两个依赖ImageMagick-devel和ImageMagick-perl。
yum install -y ImageMagick ImageMagick-devel ImageMagick-perl
接着使用pecl安装扩展。找到PHP安装目录下的pecl,例如PHP安装在/usr/local/php74目录中,则pecl一般在/usr/local/php74/bin目标中,执行命令:
/usr/local/php74/bin/pecl install imagick
即可使用pecl自动下载并安装ImageMagick,最后在php.ini中添加
extension=imagick.so
即可启用扩展。
如果你需要检查一下扩展有没有安装成功,可以执行一下命令
php -m|grep imagick
如果输出imagick,说明扩展安装成功。
题外话 :如果你不知道PHP使用的是哪个php.ini配置文件,可以执行一下以下命令
php74 -i|grep ini
找到”Loaded Configuration File”那行,就知道PHP使用的是哪个配置文件了。php -i命令
作用类似于我们使用phpinfo()函数查看PHP的相关信息。
Docker安装
容器中的PHP安装扩展,推荐使用Github上的docker-php-extension-installer,这是一个Shell脚本,可以帮我们解决扩展的依赖问题,安装扩展后还会自动清除没用的文件。我们只需要在Dockerfile中加入这个脚本即可,下面是官方的示例:
FROM php:7.2-cli
# 从Github上下载docker-php-extension-installer脚本
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
# 添加可执行权限并安装扩展
RUN chmod +x /usr/local/bin/install-php-extensions && \
install-php-extensions gd xdebug imagick这样构建出来的镜像就安装好所需要的扩展了。
题外话:在国内网络环境下,使用docker-php-extension-installer安装扩展经常会出现超时问题,建议使用外网的VPS构建镜像,上传到DockerHub或者其它私有仓库后,再拉到本地网络使用。可使用便宜的良心云,或者Vultr这种支持按时计费的VPS。
PDF转图片
代码示例:
// 实例化imagick对象
$im = new imagick();
$im->setResolution(150, 150);
$im->setCompressionQuality(100);
$im->readImageBlob($fileContent);
$im->setImageFormat('jpg');
$im->setImageBackgroundColor('white');
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);
$im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
header("Content-type: image/jpeg");
echo $im->getImageBlob();代码解读:
$im->setResolution(150, 150);
用于设置图像的分辨率。这个函数并不改变图像的实际分辨率,只是在读取或创建图像之前将其设置在Imagick对象中,这个函数需要在读取图像或创建图像之前调用。
这个函数接收两个参数,分别是横向分辨率和纵向分辨率,默认值是72*72。为了保持图像的宽高比,这两个参数值应该一样,默认值转换出来的图像不够清晰,建议使用两倍或三倍值,但同时图片的大小也会变大。
$im->setCompressionQuality(100);
设置图像的压缩质量,默认值为0;传入的参数值应为1-100,对于JPG格式图片,值越小,图像体积越小,同时清晰度也较低;但是对于PNG图片,这个结论貌似不成立,当值小于90时,图片体积反而越大,所以在转换为PNG图片格式时,保持默认值即可。
$im->readImageBlob($fileContent);
直接加载PDF文件的二进制内容,也可以使用readImage($filename)函数读取保存好的PDF文件。
$im->setImageFormat('jpg');设置要生成的图像的格式,如jpg,png等,
$im->setImageBackgroundColor('white');
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);
$im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);设置图像背景色为白色,去掉图像的alpha通道,将所有图像合并为一层,如果不执行这些操作,转换出来的图像背景会是黑色的,如下图:

header("Content-type: image/png");
echo $im->getImageBlob();获取转换生成图像的二进制数据,输出到客户端供下载;如果需要保存到文件,可以使用writeImage($filename)函数。
推荐:《PHP视频教程》
-
抖音网页版官方入口 抖音网页版在线观看官网 时间:2026-01-08 -
GitLab、Git、Github、Gitee四者的区别 时间:2026-01-08 -
顺磁性和逆磁性的区别 顺磁性和逆磁性的判断方法 时间:2026-01-08 -
顺磁性是什么意思 顺磁性材料有哪些 时间:2026-01-08 -
usim卡是什么意思 usim卡和sim卡的区别 时间:2026-01-08 -
Web前端四大渲染模式SSR、CSR、ISR、SSG的定义和区别 时间:2026-01-08
今日更新
-
腾讯视频会议app下载手机版-腾讯会议平台免费下载安装
阅读:18
-
哔咔漫画安卓版下载安装-哔咔漫画最新版本下载入口
阅读:18
-
刘富贵的梗是什么梗揭秘网络热梗背后的搞笑故事和流行原因
阅读:18
-
qq朋友网登录入口-qq朋友网网页版一键登录
阅读:18
-
刘梗宏女孩是什么梗?揭秘网络爆火健身主播的魔性口号与粉丝狂欢现象,看完秒懂!
阅读:18
-
啵乐漫画app最新版本下载-啵乐漫画官方安装包免费下载
阅读:18
-
Freeok免费追剧app下载安装-Freeok免费追剧软件官方版本
阅读:18
-
哔哩哔哩漫画网页版官方入口-哔哩哔哩漫画官网一键直达
阅读:18
-
七夕漫画官方下载入口安卓最新版-七夕漫画官方下载入口免费安装包
阅读:18
-
夸克网页版入口-夸克浏览器2026最新网页版登录
阅读:18










