news 2026/10/28 4:51:59

PDF压缩全攻略:从体积分析到图像重采样与字体子集化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PDF压缩全攻略:从体积分析到图像重采样与字体子集化

处理一份八十多页的投标资料时,原始文件一百多兆,邮件附件发不出去,对方还催着要。我当时的做法不是急着找某个压缩工具,而是先拆开看这份 PDF 的体积到底花在哪儿——结果发现七成体积是三张没降采样的高清照片,剩下的才是文字和图表。把图重采样一次,文件从 110MB 掉到 9MB,字还是清清楚楚的矢量字。

这就是 PDF 文件压缩最容易被忽略的一点:压缩不是把文件丢进某个工具点一下“开始”就完事,而是一次有判断的处理。同样一百兆的文件,有的是图片撑起来的,有的是字体撑起来的,有的是历史保存记录堆出来的,处理方式完全不同。下面这套方法覆盖办公和备考两个最主要的场景,从体积分析、参数选择、批量处理到翻车排查,新手照着做也能上手,有经验的同行应该也能从里面捡到几条没注意过的细节。

1. 先算清 PDF 的体积账,别急着找工具

1.1 一个 PDF 文件的大小到底花在哪儿了

PDF 的文件结构本质上是一堆“对象”的集合:页面描述、字体、图像、注释、书签、表单、元数据,每一项都是独立的对象,各自占体积。绝大多数人以为体积来自“文字太多”,实际情况恰恰相反——纯文字的 PDF 通常小得惊人,一本三百页的小说转成 PDF 往往只有一两兆,因为文字是矢量的,描一遍轮廓花不了几个字节。

真正吃体积的是这几类东西,按常见占比从高到低排:

体积来源典型表现常见占比
嵌入图像扫描页、照片、截图、带底图的封面60%~90%
嵌入字体中文文档尤其明显,未子集化的字体单个就有几兆到十几兆5%~25%
未压缩的对象流老版本工具生成的文件,结构数据裸奔3%~10%
冗余与历史版本反复编辑保存,旧对象没被清理5%~20%
附件、缩略图、注释内嵌文件、页面预览图、批注视情况

我见过最离谱的一份文件,正文只有六页,却有 40MB——因为它把一个完整的中文字体家族全部嵌进去了,而这个字体实际只用到不到两百个字。这种文件不需要降画质,只需要做一次字体子集化,体积立刻掉到几百 KB。所以第一步永远是判断,不是动手。

1.2 三步判断手里的文件属于哪一类

不用装任何专业软件,三步就能给文件定性。

第一步,看页面能不能选中文字。打开文件,随便找一段正文拖选一下。能选中、能复制,说明文字是矢量的,属于“文字型 PDF”或者“混合型 PDF”;拖了半天一个字都选不中,光标永远是箭头,那就是整页图片,属于“图像型 PDF”,也就是扫描件。

第二步,看放大后的边缘。把页面放大到 300% 以上。文字边缘依然是干净利落的直线,说明是矢量;边缘出现明显的锯齿和色块,那就是位图。这一步对混合型文件特别有用,因为混合型里往往正文是矢量、插图是位图,压缩策略要分开对待。

第三步,看文件属性里的大小与页数比值。用平均每页体积做个粗略判断:每页 50KB 以下基本是纯文字,没什么可压的;每页 200KB 到 1MB 大概率是图文混排;每页超过 1MB 的基本可以确定是高清扫描或者大幅面图片。这个比值能帮你快速估算压缩空间,避免在一个本来就很小的文件上浪费功夫。

判断完这三步,处理方向基本就定了:图像型走重采样和二值化,文字型走字体子集化和对象清理,混合型分开处理。

1.3 压缩力度的三档与代价

压缩从来不是免费的,每一档力度都对应着具体的画质或功能损失。我把实际用下来的三档整理成下面这张表,办公和备考场景可以直接对号入座。

档位主要手段典型压缩率代价适用场景
无损整理对象清理、字体子集化、结构重写10%~40%几乎无损,但重写会让数字签名失效合同、盖章文件、需要保真的归档
轻度有损图像降到 150~200dpi,质量 75~8540%~70%放大看有轻微模糊,打印仍清晰办公文档、报告、讲义
强力压缩图像降到 96~120dpi,质量 50~65,必要时二值化70%~95%屏幕阅读够用,打印发虚,彩色图表失真手机上看、临时传阅、题库刷题

这里有个很多人踩过的坑:压缩率不是越高越好,而是够用就好。我见过有人把一份要给客户打印的提案压到 80KB,屏幕上看着还行,打印出来插图糊成一团色块,只能重做。判断标准很简单——这份文件最终是在屏幕上读,还是要落到纸上?屏幕上读,120dpi 足够;要打印,200dpi 起步。

还有一条必须提前说清楚的:带数字签名或者电子签章的文件,任何重写操作都会让签名失效。这不是工具的问题,是签名机制本身校验的是文件字节流,你改动任何一个字节,校验就过不去。这类文件要么原件存档、另存一份压缩版用于传阅,要么干脆别压,用分卷或者链接的方式传。

2. 办公文档:从生成环节就把体积按住

2.1 打印导出法为什么兼容性最好

办公场景里最稳、最不需要装东西的办法,是用系统自带的虚拟打印功能重新导出一份 PDF。源文件不管是文档、表格还是演示文稿,打开后走打印流程,打印机选择“导出为 PDF”之类的那一项,然后在打印设置里把输出质量调低,导出来的文件体积往往能掉一半以上。

这个方法之所以兼容性最好,是因为它绕开了所有格式转换的兼容问题——打印流程是每个办公软件都必须实现的底层能力,不存在“某个版本不支持”的情况。它的工作原理是把页面重新“画”一遍,画的过程中图像会按你设定的输出分辨率重新采样,那些在文档里塞了 4000 像素宽照片的页面,导出时就自动降到了合适尺寸。

但它有三个必须知道的副作用。第一,书签和目录结构基本会丢,因为打印流程只关心视觉呈现,不关心文档的逻辑结构。第二,表单域会被压平,原本能填写的输入框变成一张图,填不了也提取不了数据。第三,超链接和交叉引用大面积失效,尤其是内部跳转。

所以这个方法适合什么?适合“我只需要一份能看、能打印、能发出去的版式文件”,比如已经定稿的通知、报价单、简单的图文说明。如果要保留交互性,就得换思路。

注意:打印导出时务必手动指定输出分辨率,别用默认值。不少系统的默认导出是 600dpi 甚至更高,压出来的文件比原文件还大,我第一次用的时候就吃过这个亏。

2.2 图片先降采样,再进文档

办公文档体积失控,九成以上是图片惹的祸。同事从手机里直接拖进来的照片,单张就是 3~8MB,一页放两张,二十页的文档轻松破百兆。正确的做法不是在文档生成之后去压,而是在图片进入文档之前就把尺寸降到位。

这里要算一笔账,算法的逻辑很朴素。图片的像素总量等于宽乘高,文件体积大致和像素总量成正比。一张 4000×3000 的照片是 1200 万像素;如果它在文档里最终只显示成 8 厘米宽,按打印 300dpi 计算,需要的像素宽度只有8 ÷ 2.54 × 300 ≈ 945像素,高度按比例约 709 像素,总共约 67 万像素。也就是说,原图有 94% 的像素是白白浪费的,它们既不会在屏幕上显示出来,也不会在打印时体现出来,只贡献体积。

实际操作的参数建议是这样:插入文档的图片,长边控制在 1600 像素左右,打印用途可以放宽到 2000 像素;格式上,照片类用有损格式、质量 80 左右,截图、图表、带文字说明的图用无损格式,因为文字边缘在有损压缩下会出现彩色噪点,非常难看。整份文档里图片格式混用完全没问题,PDF 支持在同一页里放不同编码的图像。

还有一个细节容易被忽略:不要用“拉伸”来调整图片显示尺寸。很多人插入一张大图,然后在文档里把它拖小,看起来是变小了,但嵌入的仍然是原始像素数据,体积一点没省。正确做法是先按需要的显示尺寸重采样图片本身,再插入。

2.3 字体、对象流和那些看不见的赘肉

图片处理完,剩下的体积大头是字体和结构冗余,这两块属于“看不见但很占地方”的类型。

字体子集化是收益最高的一步。原理是这样的:一个中文字体文件包含成千上万个字形,但你的文档实际只用到其中几百个。子集化就是把这几百个用到的字形单独抽出来,组成一个精简字体嵌进去。不做子集化,一份用了三种字体的文档可能白白背上十几兆;做了子集化,通常只剩几百 KB。现在主流的 PDF 生成引擎默认都会做子集化,但如果文件是从老版本软件导出的,或者经过多次格式转换,子集化信息可能丢失,需要手动重做一次。

对象流和交叉引用流是 PDF 1.5 之后引入的机制,简单说就是把原本散落在文件各处的小对象打包成块,再整体压缩。老工具生成的文件往往没有启用这个特性,结构数据以明文形式存在,体积能占到整体的百分之几到十几。重写一次文件、启用对象流,这部分体积就下来了。

历史版本残留是最隐蔽的一项。PDF 支持增量更新——每次编辑保存,新内容追加在文件末尾,旧内容原样保留。一份改过十几遍的文档,里面可能叠着十几个版本的旧数据,删掉的内容其实还在文件里躺着。处理办法很简单:打开后“另存为”一个新文件,而不是直接保存。另存为会触发完整重写,把所有无效对象清掉,这一招经常能凭空省掉一两成的体积。

提示:如果你的文件里带了内嵌附件(比如在 PDF 里塞了原始文档、压缩包),这些附件默认是原样存储的,几十兆的附件能把整个文件的体积带飞。传阅用的版本,附件该删就删。

3. 备考资料:扫描件和题库的瘦身路线

3.1 扫描参数怎么定才不返工

备考场景的 PDF 有它自己的特点:大量扫描的教材页、手写笔记、题库截图,几乎全是图像型文件。这类文件的压缩空间极大,但处理不当就变成“压完看不清、还得重新扫”,返工成本比压缩本身高得多。

关键在扫描或拍摄的源头参数,而不是后期处理。下面这张表是我反复试出来的配置,按用途分档:

用途分辨率色彩模式说明
纯文字阅读、手机刷题150dpi灰度或黑白体积最小,屏幕上看完全够
图文混排讲义200dpi灰度插图细节保留,公式清晰
需要打印的真题卷300dpi灰度打印清晰度有保障
含彩色图表、标注300dpi彩色彩色页单独处理,别整本彩扫

这里的核心逻辑是:分辨率决定上限,后期压缩只能减不能加。如果扫描时只用了 100dpi,后期无论怎么处理,文字边缘的锯齿都补不回来。反过来,扫描时用了 600dpi,后期降到 150dpi 是很轻松的事,只是多占一点临时存储。所以拿不准的时候,宁可扫高一点。

但也不能无脑往高扫。600dpi 的彩色扫描,一页 A4 就是十几兆,一本三百页的书扫下来接近 4GB,处理起来非常痛苦,硬盘和内存都吃不消。我一般的做法是:正文页统一 200dpi 灰度,遇到彩色插图页单独重扫一张 300dpi 彩色,最后合并。这样整体体积可控,关键页的信息也不丢。

手机拍照代替扫描仪的情况更多,这块有个实用技巧:拍摄时尽量让纸张平整、光线均匀、镜头正对页面,然后在拍摄后先做一次梯形校正和边缘裁剪,把桌面背景、手指、阴影全部裁掉。别小看这一步,一页照片裁掉四周背景,像素总量能减少三成以上,而且文字识别和阅读体验都好得多。

3.2 二值化、灰度与彩色页的取舍

扫描件压缩效果最猛的一招是二值化——把整页变成纯黑白两个色阶,每个像素只占 1 个比特,而不是灰度的 8 个比特、彩色的 24 个比特。理论上单这一项就能把图像数据压到原来的 1/8 到 1/24,配合针对黑白图像的专用编码,一份 50MB 的纯文字扫描件压到 2MB 以内是很常见的结果,而且文字边缘比灰度图更锐利,因为没有了灰阶过渡的模糊感。

但二值化有明确的使用边界,用错了会毁掉文件:

  • 适用:印刷体教材、试卷、纯文字笔记、黑白的公式和图表。
  • 慎用:带浅色底纹的页面、手写铅笔字、有荧光笔标记的笔记。二值化的判定阈值是固定的,浅色内容很容易被整个判成白色,直接消失。
  • 禁用:彩色图表、地图、需要辨认颜色的标注。二值化之后颜色信息全部丢失,再也恢复不了。

灰度的通用性最好,绝大多数备考资料用灰度 200dpi 就是一个很稳的平衡点。彩色页则建议单独拆出来处理,不要为了几页彩色图表让整本书都背着彩色数据的包袱。实际操作是把彩色页提取出来,按需要单独压,再和灰度部分合并回一个文件。

还有一个细节值得说:手写笔记的扫描件很难压。铅笔字、圆珠笔字在扫描后是灰度渐变的细线条,二值化容易断笔,降分辨率容易糊成一团。这类文件我的建议是保持 200dpi 灰度、用无损或高质量有损编码,接受它压不下去多少的事实,别硬压。备考资料的价值在于看得清,不在于体积小。

3.3 拆册与合并:用结构换体积

一本八百页的合集,和一个拆成八份、每份一百页的文件,总体积可能差出一大截。这不是玄学,原因是单个文件越大,工具在处理时的内存占用、索引开销、以及重复嵌入的字体和资源就越多。尤其是那种由多个来源拼接而成的合集,每一段可能都带着自己的一整套字体,拼接后谁也没被清理。

所以对备考资料,我一般建议按章节或按科目拆册。好处有三层:单文件体积小,手机打开快、翻页不卡;传输和分享方便,只发需要的那一章;出问题时影响范围小,一份坏了不至于全丢。

拆册之后,如果确实需要一份完整版,再合并回去。合并的时候注意一点:合并前先把每一份单独压好,再合并,而不是先合并成一个大文件再一次压。前者的处理效率高得多,而且每一份都能用各自最合适的参数——文字章用二值化,图表章用灰度 200dpi,互不干扰。先合并再压,就只能一刀切,要么图表糊了,要么文字章压不下去。

拆页和合并本身不改变内容质量,属于纯粹的“结构优化”,没有任何画质代价,这是我推荐优先做的一步。工具上,几乎所有主流的 PDF 处理软件都支持按页范围提取和合并,操作门槛很低。

4. 批量处理:几百个文件怎么一次压完

4.1 核心参数逐个拆开讲

单个文件手动点几下没问题,但如果你手上是几百份资料、一整个文件夹的报表,手动处理就是灾难。批量处理的核心不是“找个带批量功能的软件”,而是搞清楚那几个真正起作用的参数,因为不同工具叫法不一样,但实质就那几个旋钮。

下面这几个参数,是所有压缩工具背后的共同逻辑:

图像分辨率(DPI / 采样率)。这是影响体积最大的一个。它的作用是决定每英寸图像保留多少个采样点。从 300 降到 150,像素总量变成原来的四分之一,体积大致也按这个比例掉。这是压缩率的主力来源,也是画质损失的主力来源。

图像质量(Quality / 压缩比)。只对有损编码有效,取值通常 0~100。80 左右是肉眼几乎无损的临界点,60 以下开始出现明显的块状伪影,尤其在大面积渐变和文字边缘。这个参数的边际效益很明显:从 95 降到 85 体积掉得很快,从 60 降到 50 掉得很少但画质崩得很快。

下采样阈值(Downsample Threshold)。这是个被严重低估的参数。它规定“只有超过某个分辨率的图像才被重采样”,比如设成 1.5 倍目标分辨率,那么原本就是 150dpi 的图会被原样保留,只有 300dpi 的图才会被降下来。这个机制能避免“二次压缩”——本来就是低分辨率的图,再压一次只会更糊,体积还不一定小。

色彩空间转换。把彩色转灰度,单通道替代三通道,数据量直接降到三分之一;灰度转黑白,再降到八分之一。这个开关的收益极大,但必须人工判断能不能用。

字体处理。子集化、是否保留完整字体、是否允许替换缺失字体。默认开启子集化基本没有副作用,除非你要保证文件在其他设备上打开时的字体完全一致。

对象流与结构压缩。这个通常是个复选框,勾上就启用,没有画质代价,建议永远开。

4.2 脚本骨架与失败重试

批量处理最怕的是跑到一半崩了,或者某个文件卡死把整个队列堵住。下面这个骨架是我常用的结构,用示意命令名表示调用,实际工具的参数名对照着改就行:

# 单个文件的处理示意 pdfshrink \ --input "原始文件.pdf" \ --output "输出/原始文件.pdf" \ --downsample-dpi 150 \ --image-quality 78 \ --downsample-threshold 1.5 \ --subset-fonts \ --compress-object-streams \ --grayscale false

批量调度用脚本包一层,重点在逐个处理、失败隔离、结果记录这三件事:

import os import subprocess SRC_DIR = "待处理" DST_DIR = "已压缩" LOG = [] os.makedirs(DST_DIR, exist_ok=True) for name in sorted(os.listdir(SRC_DIR)): if not name.lower().endswith(".pdf"): continue src = os.path.join(SRC_DIR, name) dst = os.path.join(DST_DIR, name) before = os.path.getsize(src) cmd = [ "pdfshrink", "--input", src, "--output", dst, "--downsample-dpi", "150", "--image-quality", "78", "--subset-fonts", ] try: # 超时保护:单个文件最多给 180 秒,卡住就跳过 subprocess.run(cmd, check=True, timeout=180, stdout=subprocess.DEVNULL, stderr=subprocess.PIPE) after = os.path.getsize(dst) ratio = 1 - after / before LOG.append((name, before, after, f"{ratio:.1%}", "ok")) except subprocess.TimeoutExpired: LOG.append((name, before, 0, "-", "timeout")) except subprocess.CalledProcessError as e: LOG.append((name, before, 0, "-", f"fail:{e.returncode}")) # 输出汇总,先看失败的和压缩率异常的 for row in LOG: print("\t".join(str(x) for x in row))

这个骨架里有两个设计点值得说明。超时保护是必须的,我遇到过一份扫描件因为内部结构损坏,处理工具陷入死循环,跑了一晚上没动静,加上超时之后最多浪费三分钟。日志一定要记原始体积和压缩后体积,因为批量处理完之后,你真正需要关注的是两类异常:压缩率为负的(越压越大)和压缩率异常的(比如掉了 99%,那大概率是内容丢了)。

至于并发,我的建议是先别急着开多线程。PDF 处理是内存密集型任务,同时跑四个大文件很容易把内存吃满导致系统卡死。如果确实要提速,控制在两到三个并发,并且按文件体积从小到大排,小文件先跑完,能快速看到结果、及早发现问题。

4.3 压完怎么验,验什么

批量处理最容易出的问题是“压完了看着挺好,用的时候才发现有页是空的”。所以压完必须验,而且要抽验加机器验结合。

机器验这几项,都能用脚本自动跑:页数是否和原文件一致(少了页说明渲染出错);文件是否能正常打开(有些损坏的文件表面有体积但打不开);文本层是否还在(用文本提取试一下,能提取出字符说明没被栅格化);每页的平均体积是否在合理区间(某几页体积异常小,可能是内容丢失)。

人工抽验这三项:随机挑三到五页,放大到 200% 看文字边缘是否发虚、有没有块状伪影;翻到含小字注释或脚注的页面,这是最容易糊的地方;如果有彩色图表,检查颜色有没有偏移、细线有没有消失。

我自己的习惯是先拿一份最有代表性的文件单独跑一遍,参数确认没问题了再批量。这个“先跑样本”的步骤看起来慢,实际省下的返工时间远超这点开销。参数这东西,不同来源的文件差异很大,别人的推荐值在你手上未必合适。

注意:压缩完成后别急着把原文件删了。至少保留到使用方确认没问题为止。我吃过一次亏——一批资料压完直接清了原文件,结果对方反馈其中几份的表格线全部消失,只能重新找人要原始文件。

5. 常见问题与排查实录

5.1 越压越大、压完发糊、文字变图片

“压完反而比原文件大”是最常见也最让人困惑的问题。原因通常有三个。一是原文件本来就是低质量图像,工具又按默认参数重新编码了一遍,二次有损压缩不但没减小,反而因为重新编码引入了新的数据。二是工具默认没有启用结构清理,反而在重写时把一些原本压缩好的流解压成了明文。三是字体被重新完整嵌入,原本子集化的字体被替换成了完整字体。排查顺序:先看原文件的图像分辨率是不是已经低于目标值(是的话就别压图,只做结构清理);再看工具的输出设置里有没有“保留原始图像数据”这类选项,有就打开。

“压完字发糊”基本是三个参数设错了。分辨率降得太狠,低于 100dpi 时正文小字就开始糊;图像质量设得太低,低于 50 时文字边缘出现彩色噪点;或者最糟的一种——文字被栅格化了,整页变成图片,这时候无论怎么调都救不回来,只能重来。

“文字不能选中、不能搜索了”就是栅格化的典型症状。某些工具为了追求压缩率,会把整页渲染成一张图再嵌进去,视觉上看不出差别,实际上文本层已经没了。这个损失是不可逆的,尤其对需要复制引用的备考资料来说是致命的。避免方法是在工具设置里明确关掉“将文本转为图像”或类似选项,压完立刻试着选中一段文字验证。

“部分页面变空白或者出现乱码”,这个通常和字体处理有关。字体子集化过度、或者工具对某些特殊编码的字体处理有 bug,会导致页面上的文字消失或变成方块。遇到这种情况,回退的方案是在压缩时选择“不修改字体”或者“完整嵌入字体”,代价是体积大一些,但至少内容在。

“文件打不开,提示已损坏”往往发生在源文件本身结构就有问题的情况下——比如下载中断的残缺文件、多次跨工具转换过的文件。这类文件需要先做一次修复重写,让它结构完整,再谈压缩。直接压一个结构损坏的文件,结果必然是坏的。

5.2 一份能直接对照的问题速查表

现象最可能的原因处理办法
压缩后体积反而增大原图已是低分辨率;未启用结构清理;字体完整重嵌关闭图像重采样;启用对象流压缩;确认字体子集化
文字边缘发虚、有彩边图像质量参数过低;分辨率低于 100dpi质量提到 75 以上;分辨率不低于 150dpi
文字无法选中、无法搜索整页被栅格化关闭文本转图像选项,重新处理
某几页空白或乱码字体子集化异常改为完整嵌入字体,或跳过字体处理
页数变少渲染中断、页面对象损坏先修复重写源文件,再压缩
书签、目录消失打印导出方式丢结构改用支持保留结构的重写方式
表单填不了、链接失效交互元素被压平改用仅图像压缩、保留交互的方式
数字签名失效文件字节流被重写无法避免,改传阅副本或分卷传输
打印出来插图糊成色块分辨率为屏幕优化(120dpi)打印用途改 200dpi 以上
处理过程中卡死无响应源文件结构损坏或体积超限加超时保护,先拆分再处理
彩色图表颜色失真图像质量过低或色彩空间被转彩色页单独处理,质量不低于 85

5.3 几条用血换来的避坑提醒

别对同一份文件反复压缩。有损压缩是累积的,压一次质量 80,再压一次等于在已经损失的基础上再损失一次,块状伪影会越来越明显。如果第一次压完觉得还不够小,正确的做法是回到原始文件重新用更激进的参数压一次,而不是在压缩结果上再压。

含个人信息的文件,别往陌生的在线站点传。证件扫描件、体检报告、内部资料,这类东西一旦上传就脱离了你的控制。真要在线处理,至少挑那些明确说明处理完即删除的,或者干脆用本地工具,多花几分钟换个安心。

扫描件压缩完,重点检查页边和页脚。这两个地方的文字最小、最容易在降分辨率时糊掉,而且往往是页码、注释、法律法规引用这类关键信息所在。我抽查的时候一定翻到页脚看一行小字,能看清才算过关。

加密或者带权限限制的文件,先解除限制再谈压缩。很多工具面对加密文件会直接失败或者输出空文件,而且不会明确提示原因。如果你拿到一份“怎么都压不动”的文件,先确认它是不是被加密了。

灰度化之前,先翻一遍全文档找彩色元素。有些报告里只有一两页有彩色图表,整本转灰度会把这些图表变成一堆难以分辨的灰块。花两分钟翻一遍,把彩色页挑出来单独处理,比事后补救省事得多。

给你的压缩参数建个档。我现在的习惯是每次调出一组好用的参数就记下来:什么类型的文件、用了什么分辨率、什么质量、最终压缩率和画质评价。积累十来条之后,你处理新文件时基本不用试错,直接对号入座。这件事的价值在半年后才体现出来,那时候你已经忘了当初那组参数是怎么试出来的。

最后分享一个我常用的小流程:拿到一批文件,先跑一遍只做结构清理的无损处理(不动图像),看压缩率。如果已经能满足传输要求,到此为止,完全不损失画质。只有在无损处理不够用时,才进入有损环节,而且优先动图像分辨率和质量,最后才考虑二值化。这个顺序能让你在绝大多数情况下用最小的代价换到足够的体积下降——毕竟压缩的目的从来不是把文件做到最小,而是在够用的画质下把文件做到能传、能开、能打印。

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

Matlab车牌识别课程设计:从预处理到模板匹配全流程解析

简介:面向Matlab课程设计与车牌识别入门实践的课程设计报告,适合信息类、自动化及相关专业学生参考选题、撰写报告与复现实验。文档围绕车辆检测、图像采集、牌照识别三部分展开,串起图像灰度化、背景增强、二值化、车牌定位、垂直投影字符分…

作者头像 李华
网站建设 2026/10/28 4:51:55

JMeter GUI语言切换导致状态栏消失的解决方案

1. 问题现象与背景分析 最近在使用JMeter进行性能测试时,发现一个奇怪的现象:当我在GUI界面中修改了语言设置后,原本应该显示在右上角的"线程数"和"持续时间"这两个关键指标突然消失了。这个问题看似不大,但…

作者头像 李华
网站建设 2026/10/28 4:51:55

ARM Linux开发板多媒体交互系统:相册、音视频、五子棋与摄像头上传

简介:面向嵌入式Linux初学者与ARM开发板实践者的项目案例文档,围绕粤嵌GEC6818平台整理智能家居控制、多媒体影音、五子棋游戏及智能语音家居等多类实训项目。内容涵盖7寸触摸屏人机交互、LED与家电控制、电子相册与音视频播放、密码锁屏、RFID刷卡等功能…

作者头像 李华
网站建设 2026/10/28 4:50:19

cloudflare-os 深度解析:边缘 Agent 运行时架构与工程实践

1. 从"cloudflare-os"这个名字说起:它到底是不是一个操作系统第一次看到cloudflare-os这个仓库名,我承认自己被误导了大概三秒钟。脑子里第一反应是"Cloudflare 要自己做操作系统了?",然后才反应过来——这大…

作者头像 李华
网站建设 2026/10/28 4:50:05

PyMuPDF双通道判定:批量删除PDF空白页的工程实践

1. 先想清楚"空白页"到底怎么定义:三类页面的分界线批量删空白页这事,最难的从来不是写代码,而是判断标准。我见过太多脚本上来就是page.get_text() ""然后del,跑完一圈回来发现扫描件全被删光了&#xff0c…

作者头像 李华
网站建设 2026/10/28 4:50:03

claude-mem 深度解析:为 AI 编程助手构建跨会话持久记忆系统

1. 从零认识 claude-mem:它到底解决什么问题第一次看到 claude-mem 这个名字,很多人会以为它只是某个记忆插件的小工具,但真正用过一段时间之后你会发现,它其实是在给 AI 编程助手补上一块长期缺失的拼图——跨会话的持久记忆能力…

作者头像 李华