想把 PDF 里的图片取出来,别截图,直接取文件里存的那张原图。不介意上传就用在线工具最省事。怕上传或者怕图被改过就走本地处理,比如命令行的 pdfimages 或者电脑浏览器里的图映 ImgIng。我拿同一份公开宣传册把五种办法都过了一遍:截图、整页转图片、在线工具、命令行和浏览器本地提取。在线工具有两个代价。文件要先传到别人的服务器,有的还会把图重新压一遍。样本里 iLovePDF 导出的封面图体积缩到了原图的一半以下。
想要的是文件里存的原图
我以前在 MCN 做内容运营,品牌方甩来的产品手册 PDF 总要从里头扒几张图做推文配图。那时我的办法就是截图,而且截完放大一看全是糊的。糊是有原因的。PDF 里的图片是存在文件里的独立对象,页面上看到的只是它被摆放和缩放以后的样子。截图拿到的是屏幕当时显示的像素,多少取决于屏幕和缩放比例。提取拿到的是文件里存的那张图且分辨率是做文件的人当初放进去的。
样本是维基共享资源上一份公开的宣传册。作者是 Creative Commons Indonesia,名字叫《Brosur Creative Commons Indonesia》,协议是 CC BY 4.0。它有 2 页 A4 横向,内嵌 8 张图并且其中 7 张带透明蒙版。封面是印尼语,我只认得 Creative Commons 几个字,好在不影响看图。下面的数字只代表这一份样本和各工具的默认设置。KB 一律按 1024 算,字节数写在括号里。
截图和整页转图片只能当备胎
封面图的原图是 624×882 像素。我在浏览器的 PDF 阅读器里按 100% 缩放模拟了截图。Retina 屏上拿到 399×565,普通屏只有 200×282。这一档是模拟的并没有真按快捷键。真机会跟着缩放比例变,比如放大到 150% 就能到 599×847。截图不是不能用,只是图小放大就糊。
整页转图片是另一条路。它把一整页画成一张图并由选的 dpi 决定像素。这份样本的封面区在 216 dpi 下约 449×635,在 300 dpi 下约 624×882。后两个数是我按页面尺寸推算的,没有量过成品。提取图片和 PDF 转图片是两件事。前者取文件里的图,后者把页面画成图。页面上的文字和排版也会一起进去。要的是干净的配图而不是整页的样子,就别走这条路,页面上的文字会连着图一起进来,再去裁也费事。
在线工具要先把文件传上去
在线工具我试了两个:PDF24 的 Extract images 和 iLovePDF「PDF 转 JPG」里的 Extract images 选项。两个都免登录也都没注册。同一份宣传册两个都得到 8 张图并且封面图都是 624×882。光看张数和分辨率分不出差别,这也是我一开始放松警惕的原因。
第一个代价是文件要上传。我看了浏览器发出的请求:iLovePDF 往它的接口发了上传和处理两个 POST,PDF24 也是向自己的服务器发 POST,文件内容就在这些请求里被送了出去。删除时间页面上有说法。iLovePDF 写处理后 2 小时自动删除,PDF24 只写短时间后删除,没给具体时间。这些说明会变,只能以官网当天写的为准。服务器上到底删没删我没法验证。
对一份公开的宣传册来说上传无所谓,反正全网都能下到。换成没发表的论文或带客户名字的方案册我自己会先犹豫一下。这里我只陈述要上传这个事实,不判断安不安全。PDF24 的页面带广告位,页面自己写着靠广告撑着免费。
有的在线工具会把图重压一遍
张数一样我就以为差不多了。直到把封面图的字节数摆在一起才看出不对。PDF 里的封面是一张 JPEG,原始大小 225,644 字节,约 220 KB。PDF24 导出的封面 JPG 字节和它完全相同。iLovePDF 导出的封面也是 624×882 但文件只有 86,109 字节(约 84 KB)。它被重新压过一遍。
总数也对得上。iLovePDF 的 8 张图全是 JPG,合计 196,361 字节(191.8 KB)。PDF24 的 8 个文件合计 634,106 字节(619.2 KB)。其中 7 个是带透明的 PNG 加 1 个原样的 JPG。

这张图看三列:拿到几张、格式和合计体积。iLovePDF 那行写的是全部重新压成 JPG,合计 192 KB。PDF24 是 619 KB、pdfimages 是 470 KB、图映是 419 KB。合计体积不能直接比大小,PDF24 那行偏大是因为 7 张 PNG 带着透明通道,单看封面那一张才是同一把尺子量出来的。截图那一行是模拟的,不是真按快捷键截的。样本署名是 Creative Commons Indonesia《Brosur Creative Commons Indonesia》,CC BY 4.0 协议,来自 Wikimedia Commons。表格里的数字是我对这一份样本整理的属于改编。
宣传册里还有一张调色板格式的 CC Indonesia 标志。原图里红色的 INDONESIA 字样到 iLovePDF 导出的文件里变成了灰色。我把导出图和 pdfimages 取出的原图逐像素比。这张的平均差是 14.1 比其余几张的 1.1 到 3.7 大得多。为什么偏偏它变成灰度我没追,只看到了结果。
iLovePDF 页面上有 Normal、Recommended、High 三档图片质量。我留了默认设置但没试 High 会不会缩小差距。我也把 10 页的通讯 PDF 传上去了。页面显示转换完成,但这份我没拿到导出结果,所以没有数据。我只能说默认设置下它重压了这份宣传册而不能说它每次都重压。
不想上传就走本地处理
本地办法我用了两个。第一个是命令行的 pdfimages。它是 poppler 自带的工具,我用的 26.08.0 版不会上传文件。命令行对中文系出身的我门槛不低只用到 -list 和 -all 两个参数。样本上它写出了 15 个文件而不是 8 个。8 张图后面跟着 7 张透明蒙版并且蒙版单独存成了灰度 PNG。原样是 JPEG 的图直接写成 .jpg 且字节和 PDF 里的数据流一致。代价是得会敲命令并且文件名只有 a-000 这样的序号。
第二个是图映 ImgIng,一个在浏览器里处理图片、视频和 PDF 的工具站。这份样本我用的是它的 PDF 图片提取。机器是一台 Apple M4 的 Mac 加 Chromium 149 浏览器。选文件、开始处理、保存 ZIP,大约 1.6 秒出结果。界面写着「8 个结果 · 419 KB」,里面是 6 个 JPG 加 2 个 PNG。它找的是页面里真正绘制的图片而不是整页截图。JPEG 是原样导出的。宣传册 6 个加另一份 10 页通讯 29 个,字节逐个和 pdfimages 取出的比较,35 个全部相同。通讯里同一张条幅图在好几页出现。36 条图片记录只导出 32 个结果,因为复用的图只导一次。提取期间我看了网络请求并且四次处理没有任何非 GET 请求。这只对提取这一项成立,不代表整个站都不上传。
限制也得写清楚。纯矢量页会得到 0 个结果。整页都是画出来的图形和文字,没有图片对象可取。一次只处理一份 PDF。拖入两份时只读第一份且界面没有提示。多张图打成 ZIP 以后文件名只有序号且页码只在界面卡片上。我只在电脑浏览器里用过但没有测过别的设备。
怎么看出图有没有被重压
不用等导出来才发现,对着原文件就能查。先用 pdfimages 加 -list 参数列出这份 PDF 里每条图片记录,列表里有每张图的像素和原始大小。再把在线工具导出的同一张图的像素和大小放在旁边比。像素一样但大小少了一大截多半就是重压过了。这个判断我只在这一份样本上用过。带蒙版的图导出时本来就会多出一层透明通道,大小不能直接对,比之前先想想那张图有没有蒙版,有的话两边的口径就不一样了。
手头这份文件该选哪种
我自己的选法列在下面。拿去给推文配图的公开素材我会直接用在线工具,图个快。要是客户给的内部手册就走本地,哪怕多敲几行命令。不确定的时候,先拿一份无关紧要的 PDF 把整条路走一遍,确认导出的格式和张数都对,再去动正式文件。
| 手头的情况 | 选哪种 | 要留意什么 |
|---|---|---|
| 只要一张图 不在乎清晰度 | 截图 | 图小 Retina 100% 缩放下封面只有 399×565 |
| 文件不敏感 想省事 | 在线工具 | 要上传 有的会重压 导出前先看格式 |
| 文件不想外传 或要保住原图 | pdfimages 或浏览器本地提取 | 命令行要敲命令 图映一次只能处理一份 |
| 要整页的样子 连排版一起 | 整页转图片 | 这是转图片 不是提取 |
| 页面全是画出来的图表 | 截图或整页转图片 | 提取会得到 0 个结果 |
Adobe Acrobat 官网需要登录或付费,本次没实测,这里不写它的菜单。PDF 阅读器自带的导出功能我也没有逐个试,只写自己跑过的这五条路。
常见问题
提取结果是 0 个,是工具坏了吗?不一定。我拿一份只有矩形、圆和文字的自建 PDF 试过。图映给 0 个结果。pdfimages 的列表也是 0 行,因为页面里没有图片对象,全是绘图指令。这是一份样本的结果,但别的矢量 PDF 我没逐个验证。
提取图片和 PDF 转图片有什么区别?提取是把文件里存的图取出来,转图片是把整页画成一张图。后者的像素看你选的 dpi 且页面上的文字也会一起进图。
提取出来的文件名为什么没有页码?各家的命名都不带页码。图映是「文件名-image-001」这样的序号且页码在界面卡片上。PDF24 是 0.png 这样的序号。iLovePDF 是 PDF 内部的对象号,pdfimages 是 a-000。要对应页码得自己对着页面看。
一次能处理多份 PDF 吗?图映不能,一次一份。PDF24 和 iLovePDF 的上传框页面上看得出能选多个文件,但多份上传的结果我没测,不下判断。
传到在线工具的文件会留多久?iLovePDF 页面写处理后 2 小时自动删除,PDF24 只写短时间后删除。这两条是我测试那天页面上的说明并以官网当天的为准。
动手前先做一件小事:拿 pdfimages 加 -list 参数看一眼这份 PDF 里有几条图片记录。0 行的话就别折腾提取了。整页都是矢量图就换整页转图片或者截图。