news 2026/6/2 1:19:05

PDF Image Viewer PDF内嵌图像的查看和无损导出

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PDF Image Viewer PDF内嵌图像的查看和无损导出

PDF Image Viewer 是一个神奇的软件,它支持PDF内嵌图像的查看和无损导出。支持Flate、LZW、CCITT Fax、JBIG2、Run Length、DCT、JPX、ASCII85、ASCIIHex等编码,支持RGB、Gray、CMYK、CalGray、CalRGB、Lab、ICCBased、Indexed、Separation 和 DeviceN等色彩空间。

大部分人可能都听说过PDF补丁丁软件,如果你用它导出PDF图像,用得多了,就会发现有的图像无法导出,有的图像全黑,有的图像全是斜线,还有的偏色,与PDF查看器渲染出来的图像不一样。我测试过很多免费工具,国外比较常用免费工具的是XPDF里面的pdfimages 和 MuPDF中的mutool,这两个软件比PDF补丁丁要好很多,但是依然存在某些内嵌图像无法识别或者无法导出的问题。如果把全部的内嵌图像当作100的话,PDF补丁丁大约可以正确导出40%的图像(新版补丁丁打算更换MuPDF内核,可以改善导出图像的问题,大家可以拭目以待)。XPDF的pdfimages 和 MuPDF的mutool 可以正确导出80%~90%的图像。最近实测发现 poppler v26的pdfimages工具可能会好一些。

究其原因,主要是这些工具对PDF内嵌图像的色彩空间的解析存在限制,不能正确处理解码后的数据,并根据色彩空间还原图像像素。
为了解决网上免费工具无法正确还原图像的问题,避免命令行的繁琐操作,解决图像的查看和批量导出需求,我用了一个多月的时间开发了这个工具。

本软件根据提取图像的编码和色彩空间不同,使用不同的流程解码。
下载: GitHub


不少人问我怎么证明你这个软件是无损导出,为什么导出的都是png格式。而其它工具导出却是JPG、JPEG2000、TIF之类的图像格式呢?

这里我简单说一下PDF内嵌图像的导出流程:

首先,从PDF资源对象中读出来的原始数据要进行解码,例如Flate、LZW、CCITT Fax、JBIG2、Run Length、DCT、JPX、ASCII85、ASCIIHex。这里需要注意的是,有些工具遇到了DCT Decode过滤器就保存成JPG,遇到了JPX Decode过滤器就保存成JP2,遇到CCITT Fax Decode过滤器就保存成TIF。这个做法是错误的,它只对简单色彩空间格式有效。因为解码操作只是色彩空间还原的前置数据处理,DCT、JPX、CCITT Fax解码得到的数据可能是Indexed、RGB、CMYK、LAB、Separation等需要进一步处理的数据,不一定是最终的图像。

然后,对解码得到的数据要进行如下操作:

1、根据需要进行索引还原,通过调色板转成Gray、RGB、CMYK、LAB、Separation 、CalGray、CalRGB等各种需要处理的数据。
2、根据需要进行Decode映射(常用于反相处理)。
3、根据需要进行色调还原(Separation、DeviceN)、Cal计算等操作,得到初步的图像像素。
4、根据需要对图像像素进行ICC色彩校正,例如RGB、CMYK、LAB等,转成Windows支持的像素格式。
5、校正之后的数据才是真正图像的像素数据,将其保存成png格式文件。

最终保存的图像体积可能会变大,但一定是正确的图像像素,并且是无损保存的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/2 1:14:22

【记录】Ubuntu|Ubuntu 26.04 笔记本耗电过快,排查 省电过程

Ubuntu 26.04 笔记本功耗排查记录 设备:ThinkPad X1 Extreme Gen 5(i7-12700H RTX 3060) 系统:Ubuntu 26.04 日期:2026-05-31 耗电情况:1小时电量告罄。 文章目录Ubuntu 26.04 笔记本功耗排查记录一、起因…

作者头像 李华
网站建设 2026/6/2 1:13:42

抖音批量下载终极指南:从单视频到主页批量采集的完整方案

抖音批量下载终极指南:从单视频到主页批量采集的完整方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…

作者头像 李华
网站建设 2026/6/2 1:09:30

Python 面向对象编程核心:对象、实例化、封装与变量作用域

目录 1. 对象与类:蓝图与实例 1.1 什么是类?什么是对象? 1.2 Python 中的类定义与对象创建 2. 实例化:从类到对象的过程 3. 面向对象编程(OOP)四大特性概述 4. 封装 —— 数据隐藏与接口 4.1 Python…

作者头像 李华