从 PDF 提取图像
从 PDF 中提取所有嵌入图像,单独下载或打包为 .zip。在浏览器中运行 — 无需上传。
- 把 PDF 拖入或点击「浏览选择」。
- 点击「提取图像」 — 缩略图网格会出现。
- 点任意缩略图下载该图片,或点「全部下载为 .zip」打包下载。
- 图片保存为 PNG;原始编码先经 canvas 解码。
它能做什么?
遍历 PDF 的每一页,定位每次 paintImageXObject 操作,并提取其下的图像位图。每张提取的图像通过 canvas 归一化为 PNG — 源 JPEG 会丢失原始压缩,但输出像素与 PDF 实际渲染一致。使用不受支持编解码器(JBIG2、传真用 CCITT、JPEG 2000 的 JPX)存储的图像会计入数量但不被解码 — 它们需要超出 pdfjs-dist 范围的专用编解码库。
常见问题
PDF 图像提取本质上依赖编解码器。多数 PDF 都没问题 — 下面是可能产生意外结果的模式。
- 不受支持的图像编解码器。 JBIG2(部分扫描文档)、CCITT(传真扫描)与 JPEG 2000(JPX)不会被解码。状态行会报告被跳过的数量。要提取它们,可改用 /pdf-to-images 把整页光栅化,图像也会一同被画出。
- 失去原始 JPEG 质量。 为保留透明度并避免双重压缩伪影,图像导出为 PNG。如果原文件是 PDF 中嵌入的 JPEG,PNG 会更大,但像素与 pdf-lib 解码结果完全一致。
- 内联图像被忽略。 部分 PDF 使用内联图像数据(BI/ID/EI 操作符)而不是 XObject — 通常是非常小的图像。v1 不会提取这些。多数照片与截图都是 XObject,会被正确提取。
- 同一图像出现多次。 PDF 经常从多页引用同一图像 XObject。v1 会按 paintImageXObject 调用次数提取,所以重复的 logo 会按使用次数出现。需要时可按文件名或哈希去重。
- 加密的 PDF。 受密码保护的 PDF 无密码无法打开。如果有所有者密码,先通过 /pdf-unlock 处理。
- 非常大的 PDF。 每张提取出的图像在你点击 Clear 或离开页面前都会留在浏览器内存中。包含数百张高分辨率图像的 PDF 可能占用上百 MB RAM。请尽快下载 .zip,完成后点 Clear。
常见问题
为什么是 PNG 而不是 JPG?
PNG 保留透明度且避免再编码伪影。像素与原图相同;由于 PNG 无损,文件更大。要节省空间,可用 /image-compress 的 WebP 模式处理结果。
怎么知道每张图来自哪一页?
文件名遵循 `pageN-imgM.png` 模式 — N 是源页码,M 是该页内的序号。按文件名排序即可看到 PDF 中出现顺序。
加密图像会变成乱码吗?
未加密的 PDF 中图像数据并未单独加密 — 会正常解码。如果 PDF 本身加密,本工具完全无法读取(见上方加密 PDF 说明)。
为什么数量比可见图像多?
部分 PDF 一张可见图像由多个 XObject 组成(例如把 alpha 蒙版作为单独的灰度图像存储)。v1 会逐个提取 — 软蒙版在合成时让主图看起来正确,单独看像黑白剪影。
我的 PDF 会被上传吗?
不会。一切都在你的浏览器里运行 — PDF 由 pdfjs-dist 解析,图像位图通过 canvas 渲染,全程在客户端完成。不会触发任何网络请求。
可以处理多大的 PDF?
约 100 MB 后浏览器开始变慢。硬限制是标签页内存 — 如果提取时 OOM,先用 /pdf-split 分段,再分别处理每段。