经常有人拿着一份几十页的方案演示文稿来找我,说里面的产品实拍图和设计稿要抽出来做印刷物料,结果不管是右键"另存为图片",还是把整页导成图片,出来的东西一律发虚,放大到一百就满是马赛克。这个问题其实不是"导出方法选错了"这么简单,PPT 对图片的处理贯穿了插入、编辑、保存、导出四个环节,每一个环节都可能悄悄重采样一次、重编码一次。想做到不丢精度保存 PPT 里的图片,核心只有一句话:绕开所有"再渲染"的路径,直接去拿文件里躺着的那份原始字节。这篇就把这条链路从头拆一遍,包括我这些年踩过的坑、验证过的参数换算方法,以及几个连老手都容易忽略的边界情况。
1. 精度到底丢在哪一步:先把损失链路理清楚
很多人以为图片模糊是"导出的时候没设置好",所以反复在导出对话框里试参数,试到最后发现怎么调都一样。原因在于,损失往往发生在导出之前很久——图片被插入的那一刻,或者上一次保存的那一刻,像素就已经被改写了。导出只是把已经被改写过的东西再渲染一遍。所以动手之前必须先搞清楚:PPT 在什么位置动过你的图,动成了什么样。
1.1 保存动作背后,PPT 对图片做了三件事
演示文稿软件处理嵌入图片时,默认会按"适合屏幕显示"的思路来优化文件体积,具体动作有三类。第一类是重采样,也就是按图片在页面上的显示尺寸乘以一个目标分辨率,重新算出一套新的像素网格。一张 4000 像素宽的原图,如果只被放在一个两英寸宽的小框里,它可能被直接缩到几百像素。第二类是重编码,把原始数据按当前格式再压缩一遍。如果原图是 JPEG,这一步是有损的,而且是有损叠有损。第三类是丢弃附带信息,包括 EXIF 拍摄参数、ICC 色彩配置、Alpha 透明通道,转成 JPEG 存放时这些基本都保不住。
这三件事里,最要命的是重采样,因为它是不可逆的。缩小可以算,放大就只能插值猜,猜出来的像素没有任何信息量。我见过太多人把一张被缩到 800 像素宽的图重新拉大,然后埋怨软件不行——信息在缩小那一步就已经没了,后面做什么都是徒劳。
提示:判断一张图有没有被重采样,最直接的办法是看它的像素尺寸和原始素材对不对得上。如果原始素材是 3000 像素宽,文件里取出来只有 1200 像素,那就是被处理过了,再怎么导出也回不到 3000。
1.2 四种常见"保存图片"做法,各自在哪一步掉链子
大家抽图的习惯做法大概有四类,我把它们放在一起对照,损失点一目了然。
| 做法 | 实际拿到的内容 | 主要损失点 |
|---|---|---|
| 右键"另存为图片" | 软件当前内存里的那份图像数据 | 已被重采样过;被裁剪的图只给裁剪后的区域;可能被强制转格式 |
| 另存为网页格式(.htm) | 导出到同名文件夹里的一批副本 | 按当前分辨率重新编码;透明背景可能变白底;文件名全部打乱 |
| 整页导出为 PNG | 整张幻灯片的渲染结果 | 分辨率由导出设置决定,默认偏低;矢量文字被栅格化 |
| 改后缀解压取 media 目录 | 当初写进文件的那份字节 | 若从未触发过压缩,就是原始数据;若压过,拿到的是压缩版 |
看出规律了吗?前三种本质上都是"让软件把图像重新画一遍再给你",第四种才是"直接从仓库里搬货"。这也是为什么我一直建议:只要你不是要"整页幻灯片的样子",就永远先试解包。它是唯一一条不经过渲染管线的路径。
1.3 三步判断手里的图还有没有救
在动手之前花两分钟做个诊断,能省掉大量无用功。
第一步,看体积和尺寸的比例。一张 3000×2000 的实拍照片,正常 JPEG 至少一两兆。如果解包出来只有一百多 KB,基本可以判定被重压过。
第二步,解包列清单。把文件当压缩包打开,看ppt/media/下每个文件的像素尺寸和字节数。这一步用脚本最快,后面第 2 章会给完整代码。
第三步,跟原始素材对。如果你手上还有原始素材文件,直接比像素尺寸。尺寸一致说明没被重采样,只是可能被重编码;尺寸变小说明已经动过刀了。
这三步做完,你会对"还能抢救到什么程度"有个准确预期。最怕的是拿着一份已经被压过的文件,反复折腾各种导出参数,最后交付出去还是糊的,白耗一下午。
2. 拆包 .pptx:拿到嵌入原始字节的唯一稳妥路径
我最早发现这个方法纯属偶然——有次文件损坏打不开,试着改后缀解压想抢救内容,结果翻出一个装满图片的文件夹,一点没缩水。后来这就成了我处理所有演示文稿素材的标准动作。它的原理不复杂,但操作上有几个细节,不注意就会拿到错的东西。
2.1 为什么改后缀解压就能得到原图
新版的演示文稿文件本质上是一个压缩容器,内部按部件存放内容:文字在 XML 里,图片作为独立的二进制部件放在ppt/media/下,版式、备注、主题各占一个目录。软件显示图片时是解码后渲染到画布上,但保存时如果不触发压缩逻辑,写回去的就是当初那一串字节。换句话说,解包拿到的不是"图片的显示结果",而是"文件里存着的那份数据"。
这个差别在什么场景下最明显?被裁剪过的图片。你在幻灯片上把一张照片裁成一个圆形头像,看起来只剩那一小块,但原图数据通常还完整躺在包里,裁剪只是记录了显示区域。只要没有勾选"删除图片的剪裁区域",解包出来就是完整的原图。这一条救过我好几次——对方发来的稿子里图都被裁得七零八落,我从包里把原图全捞了出来,重新排版毫无压力。
还有一个附带好处:同一张图在几十页里反复使用时,包里只存一份。所以 media 目录里的文件数量往往比你在页面上看到的图片数量少,这是正常的去重,不是丢图。
2.2 从零操作:定位 media 目录并整目录取出
操作本身三十秒能完成,但我要把两种系统的细节都写清楚,因为路径和权限的坑不少。
Windows 下的做法:先复制一份文件作为工作副本,别在原文件上动手。把副本的后缀从.pptx改成.zip,系统会提示"改变扩展名可能导致文件不可用",忽略即可。然后用压缩软件打开这个 zip——注意是"打开"而不是"全部解压到当前文件夹",直接浏览更省事,避免解压出一堆 XML 污染目录。进入ppt/media/,把整个目录拖出来。
macOS 和命令行下的做法:根本不用改后缀。压缩格式是靠文件头识别的,不靠扩展名,所以直接执行解压命令就行:
unzip demo.pptx -d demo_unpacked ls -lh demo_unpacked/ppt/media/这一招在批量处理时特别好用,写个循环就能把一整个文件夹的演示文稿全部拆开。我通常会在解压后用du -sh看一眼 media 目录的总大小,如果只有几百 KB,那这份文件里的图基本都被压过了,心里先有个数。
关于目录对应关系,这里有个进阶技巧值得单独说。media 里的文件叫image1.png、image2.jpeg,你根本不知道哪张对应哪一页。想知道的话,去看ppt/slides/_rels/目录下的关系文件。比如slide3.xml.rels里会有一行<Relationship Id="rId2" Type=".../image" Target="../media/image7.png"/>,把关系编号和目标文件对应起来。再打开ppt/slides/slide3.xml,搜索r:embed="rId2",就知道这张图在第 3 页的哪个位置。页数多的时候,这个对应关系能帮你快速定位"我要的那张产品图到底是 image 几"。
2.3 扩展名说谎的时候怎么纠正
这是最容易翻车的一环。media 目录里的文件后缀不一定可信,原因有好几种:有些图是从其他文档里拖过来的,后缀沿用了来源的写法;有些工具在写入时按内容类型给了默认扩展名;还有些格式本身在容器里就没有明确后缀。结果就是你会看到一个叫image5.png的文件,用图片查看器打开却报错。
判断真实格式有三个办法,按可靠程度排序。
第一,读文件头。这是最准的。PNG 的开头是89 50 4E 47,JPEG 是FF D8 FF,GIF 是47 49 46 38,TIFF 是49 49 2A 00或4D 4D 00 2A。用十六进制编辑器看一眼前几个字节就知道了,命令行下用file命令一步到位:
file demo_unpacked/ppt/media/*第二,用图像库探测。Python 的 Pillow 在打开文件时会解析出真实格式,读im.format字段就拿到了。这个方法适合写进脚本批量跑。
第三,看能不能正常打开。如果查看器报错,但文件大小正常,八成就是后缀错了,按前两个方法确认真实格式后改过后缀即可。我碰到过一次,一批image*.png实际上全是 JPEG,改完后缀之后所有图都能正常打开了,内容一点没少。
注意:改后缀只是改了名字,不会重新编码,所以这一步绝对不会损失任何数据。真正的风险是有人图省事,用转换工具"批量转成 PNG",那才是把无损变成了有损重编码。
2.4 批量提取与尺寸清单脚本
单份文件手动拖一下无所谓,但我经常一次处理十几份,这时候脚本就值回票价了。下面这段代码做三件事:解包提取 media 下的所有图片、读真实格式并纠正后缀、输出一份尺寸和体积清单方便判断有没有被压过。
import zipfile import os import io from PIL import Image SRC_DIR = "./ppts" OUT_DIR = "./extracted" # 格式 -> 规范后缀的映射 EXT_MAP = { "JPEG": ".jpg", "PNG": ".png", "GIF": ".gif", "TIFF": ".tif", "BMP": ".bmp", "WEBP": ".webp", "EMF": ".emf", "WMF": ".wmf", } def extract_one(pptx_path, out_root): name = os.path.splitext(os.path.basename(pptx_path))[0] target = os.path.join(out_root, name) os.makedirs(target, exist_ok=True) report = [] with zipfile.ZipFile(pptx_path) as z: media = [n for n in z.namelist() if n.startswith("ppt/media/") and not n.endswith("/")] for member in media: data = z.read(member) base = os.path.basename(member) stem, ext = os.path.splitext(base) real_fmt, w, h = None, None, None try: im = Image.open(io.BytesIO(data)) real_fmt, w, h = im.format, im.size[0], im.size[1] im.close() except Exception: # 矢量格式 Pillow 可能读不了,保留原后缀 real_fmt = None fixed_ext = EXT_MAP.get(real_fmt, ext.lower()) out_name = stem + fixed_ext with open(os.path.join(target, out_name), "wb") as f: f.write(data) report.append({ "file": out_name, "declared": ext.lower(), "actual": real_fmt, "size": f"{w}x{h}" if w else "n/a", "bytes": len(data), }) # 输出清单,方便肉眼比对是否被压缩 print(f"\n=== {name} ===") for r in report: flag = " <-- 后缀不符" if r["actual"] and \ EXT_MAP.get(r["actual"], "") != r["declared"] else "" print(f"{r['file']:<24} {str(r['actual']):<6} " f"{r['size']:<12} {r['bytes']/1024:>8.1f} KB{flag}") return report if __name__ == "__main__": os.makedirs(OUT_DIR, exist_ok=True) for f in os.listdir(SRC_DIR): if f.lower().endswith((".pptx", ".pptm")): extract_one(os.path.join(SRC_DIR, f), OUT_DIR)跑完之后你会得到一张表:每个文件叫什么、真实格式是什么、像素多大、体积多大、后缀有没有说谎。这张表就是你判断"还能不能用"的依据。像素尺寸够、体积正常,直接拿去用;像素明显偏小,说明源头就被压了,得回头找原始素材。
3. 把压缩开关提前关掉:让图片在插入那一刻就保持原样
解包是"事后补救",但如果能做到"事前不压",后面所有环节都省心。这里要讲的是软件里那两个必须改的设置,以及一个很多人算错的问题——你的图到底需要多少像素才算够。
3.1 选项里那两个必须改的地方
路径在"文件 - 选项 - 高级",往下拉找到"图像大小和质量"区域,里面有两点要动。
第一,勾选"不压缩文件中的图像"。这个选项控制的是保存时是否对图像做重采样和重编码。勾上之后,写进文件的就是原始字节。很多人以为这个是默认开的,恰恰相反,默认是关的,所以新建的文稿一开始就在压图。
第二,把"默认分辨率"改为最高那档(通常标注为高保真)。即使你勾了不压缩,这个下拉值在部分场景下仍会起作用,比如某些格式转换和自动处理路径。保险起见,设到最高。
改完之后有个关键提醒:这些设置只对改动之后新插入或重新保存的图片生效。已经压过的图,勾选这个选项也回不来。所以正确的时间点是"新建模板的时候就改",而且如果你的团队有统一的模板文件,改那个模板比每个人各自改要靠谱得多。
提示:如果你经常处理别人的稿子,可以在拿到文件后先看一眼这个选项的状态。如果对方一直开着压缩,那这份稿子里的图大概率已经被处理过了,别抱太大希望,尽早去要原始素材。
3.2 用像素换算反推:你的图到底够不够用
这是我被问得最多的一个问题:"我的图应该多大?"网上很多答案给的是固定数字,比如"至少 1920 宽",这个说法太粗,因为图片够不够用取决于它在页面上占多大、最终用途要求多高的输出精度。正确的算法是:
所需像素宽 = 图片在页面上的显示宽度(英寸) × 目标输出精度(ppi)
标准 16:9 页面的尺寸是 13.333 英寸 × 7.5 英寸。据此可以算出一张占满整页的图在不同输出精度下需要多少像素:
| 目标精度 | 整页所需像素 | 典型用途 |
|---|---|---|
| 96 ppi | 1280 × 720 | 屏幕预览、内部沟通 |
| 150 ppi | 2000 × 1125 | 一般演示、网页配图 |
| 220 ppi | 2933 × 1650 | 高质量投影、双屏展示 |
| 300 ppi | 4000 × 2250 | 印刷交付、物料制作 |
| 600 ppi | 8000 × 4500 | 精细印刷、大幅面 |
举个实际例子:一张图在页面上占了 40% 的宽度,也就是 5.33 英寸。如果要按 300 ppi 输出印刷物料,它至少需要 5.33 × 300 ≈ 1600 像素宽。如果原图只有 800 像素,那不管你把导出设置调到多高,软件都只能靠插值补像素,结果一定是虚的。
反过来说,这个公式还能帮你省空间。很多人无脑塞 6000 像素的大图进去,其实只需要 1600 像素,白白让文件体积翻好几倍,打开还卡。按用途反推所需像素,再决定放多大的图,是更专业的做法。
3.3 已经被压过的文件还有没有救
得说实话:重采样造成的信息丢失,在文件本身里是恢复不了的。像素被丢掉就是丢掉了,没有算法能把真实细节算回来。但这不代表没辙,下面几条按成功率从高到低排。
找原始素材。这是唯一真正可靠的办法。原始照片、设计源文件、素材库下载记录、邮件附件、云盘的历史版本,任何一条线索都比在压缩文件上折腾强。
找自动恢复的临时文件。软件在异常退出时会在临时目录留下恢复副本,这些副本有时是压缩前的状态。临时目录通常藏在用户目录的隐藏文件夹里,找一下有惊喜。我电脑上至今还躺着一份靠这个办法救回来的图。
从其他载体里找。如果这份稿子曾经导出过 PDF、发过邮件、传过协作平台,那些副本里的图片未必被压过——尤其是 PDF,很多时候里面的图反而是完整的。从 PDF 里把图抽出来,经常比从演示文稿里抽更干净。
最后才考虑接受现状。如果图只是用于屏幕展示,150 ppi 的水平其实够看;只有要放大、要印刷、要裁切时才真的致命。先确认用途,再决定要不要花时间抢救,别为了一个只在投影上闪三秒的图折腾一整天。
4. 矢量图形、图表和背景图:那些不在 media 里露面的对象
解包法虽然好用,但它只解决"以图片文件形式存在"的对象。实际工作中还有一大类东西,你在页面上看它是图,但在包里根本找不到对应的图片文件。这一类如果按位图的方式处理,就会遇到"怎么都糊"的死结。
4.1 EMF 与 WMF:解包出来打不开怎么办
这两种是矢量图元文件格式,在包里以.emf或.wmf存在。它们是矢量的,理论上可以无限放大不失真。问题在于,大部分看图软件不认这两种格式,双击打不开,很多人就以为文件坏了。
正确的处理路径有两条。用矢量绘图软件打开再导出,这是质量最高的方式,可以指定任意输出分辨率导出成 PNG。如果手头没有合适的工具,还有个土办法:把图形插回演示文稿或文字处理软件里,拖到远大于画布的尺寸(比如放大到 400%),再右键另存为图片。因为软件是按当前显示尺寸栅格化的,放大之后导出的像素就翻了好几倍。这个办法不够优雅,但应急时非常好用,我至今还在用。
还有一个更省事的判断:新版软件支持直接插入 SVG 格式的矢量图,这类文件在 media 目录里就是.svg,是纯文本的矢量描述,直接用文本编辑器就能打开看,也可以无损转为任意分辨率。如果你的素材是 SVG 插入的,那恭喜,解包出来就是最优解。
4.2 图表、SmartArt 和形状组合的"高保真转位图"
柱状图、流程图、由几十个形状拼成的示意图,这些在包里根本没有对应的图片文件——它们是 XML 描述的图形对象,由软件实时绘制。所以解包法对它们完全无效,唯一的路是"高分辨率栅格化"。
我的做法是三步。第一,把要导出的对象单独选中,复制,用"选择性粘贴"粘成"图片(增强型图元文件)",这样就得到了一个矢量中间态。第二,把这个矢量对象拖到很大——大到超出画布也没关系,因为后面是导出,不看画布。第三,右键另存为 PNG。这样得到的像素比你直接整页导出要高出好几倍,线条边缘也更干净。
为什么不直接整页导出?因为整页导出的分辨率是按页面尺寸算的,一个只占页面十分之一的小图表,导出后像素少得可怜。而先转成矢量再放大,等于把这个对象的有效分辨率提高了,效果差很多。
4.3 母版、背景填充与链接图片的取法
背景填充的图片。如果某页的背景是"图片或纹理填充",那张图在包里是存在的,位置同样在 media 目录,只是你从页面上看不到它的边界。解包出来一样能拿到。
母版里的图片。公司模板里那些角落的装饰图、页脚标识,都存在母版或版式的关联文件里。解包时它们也在 media 目录下,只是文件名不会和具体某一页对应。判断方法是在包里翻一下ppt/slideMasters/_rels/和ppt/slideLayouts/_rels/下的关系文件。
链接图片(这个要特别注意)。如果图片是"链接到文件"而不是"嵌入文件",那包里根本没有图片数据,只存了一个文件路径。这种情况下解包什么都找不到。判断方法很简单:选中图片,看右键菜单里有没有"更新链接"之类的选项;或者在文件信息里检查是否有外部链接。
注意:链接图片有个隐患——把文件发给别人,对方打开时图片会全部变成红叉,因为路径在他电脑上不存在。所以凡是准备外发的文件,务必先把链接图片转成嵌入。这个坑我踩过一次,发给对方之后才发现整份稿子的配图全没了。
5. 导出与中转环节的精度守门
素材从文件里取出来了,事情还没完。后面的格式选择、导出参数、中转工具,每一个都可能把辛苦保住的精度再吃掉。这一章讲怎么守住最后几道关。
5.1 整页导出时分辨率该怎么填
有时候你要的不是单张图,而是"这一页长什么样",比如做课件、做产品说明。这时候走整页导出,关键是那个很容易被忽略的对话框。
操作路径是"文件 - 导出 - 更改文件类型 - PNG",或者"另存为"然后选 PNG。选完之后会弹出一个小对话框,问"每张幻灯片导出的宽度",单位是像素。这里默认值往往偏低,需要手动改。按前面第 3 章的换算表,300 ppi 对应 4000 像素宽,直接填 4000 就行。
再补两个细节。一是导出页数多的时候会很慢,几十页可能要等几分钟,别以为卡死了;二是导出后会在目标目录生成一个同名文件夹,所有页按顺序编号,方便后续批量处理。
如果用途是印刷,其实还有更稳的一条路:先导出 PDF,再从 PDF 里抽图。PDF 在很多情况下保留了原始的图像数据,用工具直接抽出来往往比从演示文稿里导更干净。而且 PDF 本身就是印刷行业的标准交付格式,一举两得。
5.2 拿到图之后存成什么格式
格式选错,前面所有努力白费。下面这张表是我常用的决策依据。
| 格式 | 压缩方式 | 透明支持 | 适合的场景 |
|---|---|---|---|
| PNG | 无损 | 支持 | 截图、图表、带文字的图、需要透明底的素材 |
| JPEG | 有损 | 不支持 | 照片类素材,质量建议 90 以上 |
| TIFF | 无损 | 支持 | 印刷交付、需要保留完整色彩信息 |
| BMP | 无损 | 部分 | 不推荐,体积大且兼容性一般 |
| WebP | 可选无损 | 支持 | 网页用,但部分旧版软件不认 |
三条经验:第一,需要透明底一律 PNG,别碰 JPEG。JPEG 没有透明通道,透明区域会变成白块,边缘还会出现一圈杂边。第二,JPEG 每另存一次就损失一次。如果必须用 JPEG,尽量从原始数据一次导出到位,不要在多个软件之间反复转存。第三,格式转换要选无损路径。从 JPEG 转 PNG 不会恢复任何质量,只是把有损数据包进了无损容器,白白让体积翻倍。
5.3 这些中转动作会悄悄毁掉你的图
我列几个亲眼见过、自己也犯过的错误,都是"看起来没问题但实际掉精度"的。
用截图工具截取幻灯片上的图。截图的分辨率上限是你的屏幕分辨率,而且经过了一次屏幕渲染和一次采样,双重损失。哪怕你把页面放大到 400% 再截,得到的也是插值后的模糊像素,不是真实细节。
复制粘贴到聊天工具再存回来。大部分聊天工具默认会压缩图片,需要手动勾选"发送原图"。这个动作太容易忘,我建议直接把文件当附件发,别走图片通道。
粘贴到文字处理软件再另存。文字处理软件同样有一套图片压缩机制,而且默认也是开的。多经过一个软件,就多一次重编码,还多一层不可控。
用系统自带的看图工具另存。某些老版本工具在保存时会丢掉透明通道和色彩配置,PNG 存出来变成 24 位无透明,带 alpha 的素材边缘直接出黑边。
邮件客户端自动压缩附件。部分客户端对超过一定体积的图片附件会自动缩小。发重要素材时打包成压缩包,能有效规避这个问题。
6. 实测踩坑记录:六个我亲自栽过的跟头
前面讲的是方法和原理,这一章讲具体翻车现场。这些坑的共同点是:看文档看不出来,只有真正操作过一遍才会遇到。
6.1 右键另存为得到的 PNG,尺寸和原图对不上
第一次发现这个问题时我很困惑:明明是同一张图,右键存出来的和我从包里取的,像素差了将近三倍。后来想明白了——右键存的是"软件当前显示用的那份数据",已经被按显示尺寸重采样过了;包里那份才是原始数据。这个差别在图片被缩得很小放在页面上时最明显,缩得越狠,差得越多。
由此得出一个结论:只要你不是要"页面上看到的那个大小",就永远优先解包。右键另存为的唯一优势是方便,代价是精度。
6.2 点过一次"压缩图片",原图就再也回不来
早年间我看到菜单里有个"压缩图片",以为是优化体积的好功能,就在一份重要稿子上点了一下。当时没觉得有什么变化,过了两周要抽图做物料,才发现所有图都被降到了很低的分辨率,而且不可撤销——那个操作直接把文件里的图像数据重写了一遍,没有任何回退余地。
这个教训让我养成了一个习惯:任何涉及"压缩""优化""减小体积"的按钮,在源文件上永远不点。要压就压副本,压完确认没问题再说。另外,这个功能在不同版本里的位置和名字略有差异,但特征都是"减小文件大小"这类描述,看到就绕开。
6.3 高分屏上看着清楚,导出后糊成一片
这个错觉特别有欺骗性。在高分屏上,图片显示得很锐利,你会以为"质量没问题"。但屏幕显示锐利和文件里有足够像素是两回事——高分屏的像素密度高,同一张图在小尺寸下看起来更细腻,但它的实际像素数一点没变。等你导出放大或者拿去印刷,真相就露出来了。
判断方法只有一个:看像素尺寸,不看屏幕效果。把图取出来,看一眼它到底是 1200 宽还是 4000 宽,这个数字不会骗人。
6.4 复制到聊天窗口再存回来
有次赶时间,我把图复制到聊天窗口发给自己,再从聊天记录里存下来用。结果交付前被人指出图有大片色块和锯齿。回头一查,聊天工具做了强压缩——它按"适合网络传输"的标准重编码了一遍,画质掉得很厉害。
从那以后我的规矩是:跨设备传输素材一律用文件传输或压缩包,绝不用图片消息通道。如果非要用即时通讯工具,一定勾"原图"或者直接发文件。
6.5 用网页格式导出,透明背景变成白底
网页格式(.htm)导出是个老办法,会把所有图片导出到一个文件夹里,看起来很方便。但它有两个问题:一是所有图片按当前分辨率重新编码;二是透明通道经常丢失,PNG 的透明区域变成白底。对于需要透明底的素材(比如抠好的产品图、图标),这条路直接废掉。
而且它导出的文件名毫无规律,一堆image001.png混在一起,页数多的时候根本分不清哪张是哪张。相比之下,解包法的目录结构清晰得多,还能通过关系文件追到具体页码。
6.6 中文文件名和长路径导致解压失败
这个坑很不起眼但很烦人。有些压缩工具在处理中文文件名、超长路径或者嵌套很深的目录时会报错,解到一半中断。表现是"解压失败"或者"文件已损坏",让人误以为源文件坏了。
解决办法有三个:把文件复制到路径短的英文目录下再操作;换一个对中文支持更好的解压工具;或者干脆不解压,直接用压缩软件浏览内部结构,需要哪个拖哪个。我现在的习惯是固定建一个D:\work\ppt_unpack\这样的短路径工作区,所有解包操作都在里面做,省心。
最后一个实用小技巧。如果你要处理的是一批格式不一的素材,取出来之后建议按"用途"而不是"来源"分类存放:需要印刷的放一个目录,屏幕用的放一个目录,矢量源的单独放一个目录。因为不同用途对像素和格式的要求完全不同,混在一起早晚会拿错。我吃过这个亏——把 96 ppi 的预览图当成印刷素材交了上去,返工了一整晚。