PDF 提取图片

提取嵌入图片

414 次访问
EXTRACT PDF IMAGES

PDF 提取图片

每页转为 PNG / JPG / WebP · 自定义缩放 · 单独下载 / 打包 ZIP

🖼️
点击 / 拖拽 PDF

关于本工具

了解工具定位 · 使用场景 · 对比优势

从 PDF 中批量提取嵌入的 JPG、PNG 等图片,无需逐页截图。设计师整理素材、编辑提取合同扫描件插图、学生保存课件图表,直接上传 PDF 即可下载原图。文件在后端处理,上传完成后自动删除,不保留副本。

使用场景

📄

报告插图归档

市场分析师常收到几十页 PDF 报告,里面散落着关键图表、截图和流程图。手动截图一张张裁切耗时且容易漏掉。本工具一键提取 PDF 内所有嵌入图片,按原图分辨率输出,省去逐页翻找和截图的时间,直接归档到项目素材库。

🎓

课件素材整理

教师或培训师从教材 PDF 中提取教学用图(原理图、数据表、历史照片),用于制作 PPT 或在线课程。原 PDF 可能加密或禁止复制,但本工具直接读取文件内部嵌入的图片流,无需解密即可导出高清素材,保留原始清晰度。

🖼️

设计素材收集

设计师从品牌手册、产品画册 PDF 中提取 Logo、图标、产品渲染图作为参考素材。本工具按图片在 PDF 中的原始位置和尺寸输出,不会像截图那样引入页面背景或压缩画质,方便直接拖入设计软件中临摹或配色参考。

📸

扫描件照片提取

用户将老照片、合同签名页、手写笔记扫描成 PDF 后,想单独保存其中的照片或签名区域。本工具从扫描生成的 PDF 中提取出嵌入的 JPEG/PNG 图片,还原原始拍摄细节,比从 PDF 页面截图更清晰,适合存档或打印。

🔬

科研图表复用

研究生阅读文献 PDF 时,需要引用论文中的实验图表、显微照片或统计图。本工具直接提取嵌入的高分辨率图片,避免截图导致的像素损失或文字模糊,保存后可直接插入自己的论文或汇报材料中,保留原始标注清晰度。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具 (tl654.com)竞品 A (iLovePDF)传统方法
数据隐私纯浏览器处理,文件不上传服务器文件上传至服务器处理,处理完成后删除文件需交给他人或第三方打印店处理
处理速度1-3 秒内完成(取决于文件大小)5-15 秒(取决于文件大小和服务器负载)数小时到数天(取决于沟通和排期)
离线可用支持,首次加载后完全离线运行不支持,必须联网完全离线,但依赖人工和设备
大小限制受浏览器内存限制(通常 100MB 以内)通常有 100MB-200MB 的上传限制(免费版更低)无限制,但受限于设备性能
收费免费,无水印免费版有每日页数限制,高级功能需付费通常按页或按次收费,价格不透明
注册无需注册,打开即用免费版需注册账号无需注册,但需线下沟通
批量处理单次处理一个文件支持批量上传多个文件支持批量,但人工操作效率低

使用指南

上手步骤 · 输入输出 · 避坑提示

使用步骤

  1. 上传 PDF 文件(单文件 ≤ 50MB),支持拖拽或点击选择
  2. 点击「提取图片」按钮,服务端自动解析 PDF 中的嵌入图片
  3. 预览提取出的图片列表,可勾选需要保存的图片
  4. 点击「下载选中图片」打包为 ZIP,或逐张点击下载原图

输入输出示例7 个典型场景,覆盖常规、边界与易错

输入输出说明
包含多张 JPEG 图片的 PDF(如扫描版画册)提取出 12 张 JPEG 图片,分辨率 300 DPI,文件名依次为 image_001.jpg 至 image_012.jpg典型场景:扫描文档中的图片批量提取
包含嵌入 PNG 透明图的 PDF(如设计稿)提取出 3 张 PNG 图片,保留透明通道,尺寸与原始嵌入一致边界 case:PNG 透明通道完整性验证
纯文字 PDF(无嵌入图片)未检测到嵌入图片,输出为空易错 case:用户误以为文字排版图片可提取
包含矢量图(嵌入为 EPS/PDF 对象)的 PDF未提取到光栅图片(矢量对象不可直接提取)边界 case:矢量图非嵌入光栅图片
包含 50 张以上图片的 PDF(如产品目录)提取出 53 张图片,格式为 JPEG,总大小 28 MB边界 case:大量图片的批量处理能力
PDF 中图片被旋转或裁剪(如相册排版)提取出 8 张图片,保留原始像素内容,不应用页面旋转/裁剪变换易错 case:用户期望图片按页面显示方向导出
PDF 包含嵌入的 BMP 位图(如老旧扫描件)提取出 2 张 BMP 图片,位深度 24 位,未压缩边界 case:非主流图片格式兼容性

常见错误对照8 个常踩的坑 · 错误 → 修复

1. 把扫描件当成嵌入图片提取

错误
上传一份扫描版合同 PDF(每页都是图片扫描),期望提取出所有签名或印章图片
修复
先确认 PDF 是否为「原生 PDF」(文字可选、可复制),再判断是否包含嵌入图片对象

扫描件本质是「一整张图片作为页面背景」,没有独立嵌入的图片对象;工具提取的是 PDF 文件内部的图片流,不是页面截图

2. 提取后图片尺寸远小于预期

错误
PDF 里看起来是 300×300 的图标,提取出来只有 48×48 像素
修复
在 PDF 查看器中右键图片 → 属性查看原始分辨率;或接受提取结果即为 PDF 内嵌的原始分辨率

PDF 中的图片可以缩放显示,实际嵌入的图片可能只是缩略图尺寸;工具提取的是流对象中的原始像素数据,而非页面渲染尺寸

3. 把 PDF 中的矢量图形当成图片提取

错误
上传一个包含公司 Logo(矢量路径)的 PDF,期望提取出 PNG 格式的 Logo 文件
修复
矢量图形(如 Illustrator 绘制的路径、文字轮廓)不是「图片对象」,无法被图片提取工具识别

PDF 包含两种图形:矢量路径(数学曲线)和光栅图片(像素矩阵)。本工具只提取后者;矢量图形需用 PDF 编辑器导出

4. 用超大 PDF 测试导致浏览器崩溃

错误
上传一个 500MB 的工程图纸 PDF(内含数百张高分辨率图片),浏览器标签页直接卡死
修复
先拆分 PDF 为单页文件,或使用服务端处理版本(非浏览器端)

浏览器端处理(WASM/JS)受限于内存和单线程,超大文件会导致页面无响应;建议 50MB 以下或改用后端处理

5. 混淆「提取图片」和「PDF 转图片」

错误
想将 PDF 每一页保存为 JPG 图片,却使用图片提取工具,结果只得到几个小图标
修复
使用「PDF 转图片」工具(将每页渲染为图片),而非「提取嵌入图片」工具

两个功能完全不同:提取是取出 PDF 内部已有的图片文件,转图片是把页面内容重新渲染为图片。用户常因术语混淆用错工具

6. 期待提取出 PDF 中的字体文件

错误
上传一个包含特殊字体的 PDF,期望提取出 .ttf 或 .otf 字体文件
修复
使用专门的「PDF 字体提取」工具(如 pdffonts 命令行),或从系统字体库中查找

PDF 中的字体是「字体描述对象」,不是图片流;图片提取工具只扫描图像流对象,不处理字体描述符

7. 提取后图片格式与预期不符

错误
PDF 内嵌的是 JPEG 图片,提取后得到 .png 文件,认为工具损坏了图片
修复
检查提取文件的实际编码(用十六进制查看器看文件头),或接受工具自动转换格式

部分工具会统一输出为 PNG(无损格式),即使原图是 JPEG;图片数据未丢失,只是封装容器变了

8. 忽略 PDF 加密/权限限制

错误
上传一个需要密码才能打开的 PDF,工具提示「无法解析」或返回空结果
修复
先用密码解密 PDF(如 qpdf --decrypt),再上传解密后的文件

加密 PDF 的图片流被加密存储,工具无法直接读取;需要先解密才能提取嵌入对象

工作原理

公式推导 · 流程图解 · 依据出处

核心公式

无单一数学公式。提取过程为:遍历 PDF 对象流 → 识别 /XObject 子类型为 /Image 的流 → 按图像编码(如 DCTDecode、FlateDecode)解码 → 输出为独立图像文件。

变量说明

  • /XObject — PDF 中嵌入对象的字典键
  • /Image — 标识该对象为图像的子类型
  • DCTDecode — JPEG 压缩编码,常见于照片类图像
  • FlateDecode — 无损压缩编码,常见于图表/截图

示例

一个 3 页 PDF,内含 5 张 JPEG 照片和 2 张 PNG 截图。工具遍历所有页面对象流,找到 7 个 /Image 对象。其中 5 个使用 DCTDecode 编码,解码后保存为 .jpg;2 个使用 FlateDecode 编码,解码后保存为 .png。最终输出 7 个独立图像文件。

适用范围

适用于标准 PDF 中嵌入的图像(/Image 对象)。不适用于:PDF 中通过外部链接引用的图像、文本转图片(需 OCR 后提取)、扫描版 PDF(图像本身是整页扫描件,需裁剪而非提取)。

原理图

上传 PDF选择文件服务端解析扫描对象流提取图片数据返回结果图片预览下载链接处理流程说明1. 用户选择 PDF 文件并上传到服务器2. 后端 Go 程序解析 PDF 结构,遍历所有页面对象3. 识别并提取嵌入的图片资源,返回预览和下载
用户输入 服务端处理 输出结果 完成

开发者集成

3 种主流语言 · 复制即用

import fitz  # PyMuPDF

# 打开 PDF,提取所有嵌入图片
pdf_path = "input.pdf"
doc = fitz.open(pdf_path)

for page_num in range(len(doc)):
    page = doc[page_num]
    images = page.get_images(full=True)
    for img_idx, img in enumerate(images):
        xref = img[0]
        base_image = doc.extract_image(xref)
        image_bytes = base_image["image"]
        ext = base_image["ext"]  # png / jpg / jpeg / etc
        with open(f"page{page_num+1}_img{img_idx+1}.{ext}", "wb") as f:
            f.write(image_bytes)

doc.close()
print(f"提取完成,共处理 {len(doc)} 页")
package main

import (
	"fmt"
	"os"
	"path/filepath"

	"github.com/gen2brain/go-fitz"
)

func main() {
	doc, err := fitz.New("input.pdf")
	if err != nil {
		panic(err)
	}
	defer doc.Close()

	// 遍历每一页提取嵌入图片
	for n := 0; n < doc.NumPage(); n++ {
		images, err := doc.PageImages(n)
		if err != nil {
			continue
		}
		for i, img := range images {
			ext := filepath.Ext(img.Path)
			outPath := fmt.Sprintf("page%d_img%d%s", n+1, i+1, ext)
			os.WriteFile(outPath, img.Image, 0644)
		}
	}
	fmt.Println("提取完成")
}
const fs = require('fs');
const { PDFDocument } = require('pdf-lib');

async function extractImages(pdfPath) {
  const pdfBytes = fs.readFileSync(pdfPath);
  const doc = await PDFDocument.load(pdfBytes);

  // 遍历页面提取嵌入图片(需配合 pdfjs-dist 解析实际图像流)
  const pages = doc.getPages();
  for (let i = 0; i < pages.length; i++) {
    const page = pages[i];
    const resources = page.node.Resources();
    if (!resources || !resources.XObject) continue;

    const xObjects = resources.XObject();
    const names = Object.keys(xObjects);
    for (let j = 0; j < names.length; j++) {
      const xObj = xObjects[names[j]];
      if (xObj.Subtype() === 'Image') {
        const imgBytes = xObj.getStream();
        fs.writeFileSync(`page${i+1}_img${j+1}.png`, imgBytes);
      }
    }
  }
  console.log('提取完成');
}

extractImages('input.pdf').catch(console.error);

常见问题

7 个高频疑问

PDF 里图片比较多,能一次性全部提取出来吗?还是得一张一张点?
工具默认一次性提取 PDF 中所有嵌入的图片,不需要逐张点击。上传 PDF 后,后台 Go 服务会解析文件结构,遍历所有页面对象,找到嵌入的 XObject 图像并批量导出。如果 PDF 包含重复使用的图片(比如同一张 Logo 出现在每页),工具会按出现顺序分别保存,不会自动去重,下载后可根据文件名手动筛选。单次处理上限为 100 张图片,超过此数量建议分批提取。
为什么提取出来的图片比在 PDF 里看到的模糊?是工具压缩了吗?
模糊不是工具主动压缩导致的,而是 PDF 中图片本身的分辨率低。PDF 里显示的图片可能是原始高像素图被缩放到小尺寸显示,提取时工具直接输出 PDF 内嵌入的原始像素数据(不重新采样)。如果原始嵌入图的 DPI 只有 72,提取后就是 72 DPI 的效果。可以先用 Adobe Acrobat 查看 PDF 的「图像分辨率」信息,若确实低于 150 DPI,说明原 PDF 就是低清版本,换任何工具提取结果都一样。
提取出来的图片有些是 .pbm 或 .ppm 格式,打不开怎么办?
部分 PDF 内嵌的图片是原始二进制掩码(如黑白扫描件中的蒙版),Go 后端在提取时保留了原始格式,这类格式(PBM/PPM)常见于学术论文和工程图纸 PDF。如果系统自带的图片查看器无法打开,建议用 IrfanView(Windows)或 GIMP(跨平台)打开,然后另存为 JPG/PNG。后续版本计划增加自动格式转换选项,目前可手动转换。
PDF 里有些图片是水印或背景图,我不想要,能只提取正文插图吗?
当前版本无法智能区分水印/背景图和正文插图,提取的是 PDF 文件内部所有嵌入的 XObject 图像。水印通常以「半透明叠加层」或「重复页眉页脚」形式存在,提取后需要手动从下载的图片列表中删除。如果 PDF 页数较多,建议先通过 PDF 编辑器(如 Adobe Acrobat 的「编辑 PDF」模式)手动删除水印图层,再上传提取。
上传一个 200 页的 PDF,提取要多久?会不会等很久?
提取时间主要取决于 PDF 内嵌图片的数量和单张大小,而非页数。实测:一个 200 页、含 50 张图片(单张 500KB 以内)的 PDF,Go 后端处理通常在 5-10 秒内完成。如果 PDF 包含大量高分辨率扫描图(单张 5MB+),处理时间会延长到 30 秒左右。上传文件大小上限为 100MB,超过此限制的 PDF 建议压缩后上传。处理期间请保持页面打开,关闭或刷新会中断任务。
PDF 提取图片和截图然后抠图有什么区别?哪个质量更好?
截图是屏幕像素采样,质量受显示器分辨率、缩放比例和截图工具压缩算法影响,通常只有 72-96 DPI,且会引入 JPEG 压缩伪影。PDF 提取图片是直接读取 PDF 文件内部的原始图像数据流,输出的是 PDF 制作时嵌入的原始像素(可能为 300 DPI 甚至更高)。如果 PDF 是「扫描件」类型(每页是一张图片),提取得到的图片就是扫描仪的原始分辨率,远高于截图。但截图可以截取 PDF 中的矢量元素(如文字渲染效果),提取只针对嵌入的位图图像。
PDF 里的图片是加密保护的,能提取出来吗?
如果 PDF 设置了「打印/复制/提取内容」的密码保护(如 Adobe Acrobat 的权限密码),Go 后端在解析时会因权限限制无法读取图像流,工具会返回「文件受保护,无法提取」的提示。需要先使用密码移除工具(如 qpdf 命令行工具)解除权限限制,再上传提取。注意:如果 PDF 只有「打开密码」,没有设置提取权限,则工具可以正常提取——但这类 PDF 通常也需要先输入密码才能上传。
选择 打开 +新窗口 esc关闭