PNG 透明度在 PDF 中的表现
很多 PNG 图片都有透明的部分:没有背景的标志、图标、以透明背景导出的图表、抠出来的产品图、窗口截图周围的柔和阴影。PNG 把这些信息存放在一个额外的通道里,称为 alpha 通道,它记录每个像素的不透明程度——完全不透明、完全透明,或介于两者之间的任何程度。本指南介绍 PNG to PDF 如何处理这个通道,以及为什么结果在屏幕上可能让你感到意外。
透明度会进入 PDF
PDF 也能保存透明度,方式是软蒙版:一张与图片并列存放的独立灰度图像,告诉阅读器每个像素要显示多少。PNG to PDF 会把 PNG 的 alpha 通道写入这个蒙版,每像素 8 位。在 Chrome 和 Edge 等基于 Chromium 的浏览器中,蒙版保存的是你文件中的精确值。在 Safari 中,带透明度的灰度 PNG 和 16 位 PNG 的 alpha 值可能相差 255 级中的 1 级,肉眼看不出来。因此:
- 完全透明的像素仍然完全透明。
- 半透明的像素——抗锯齿边缘、柔和阴影、淡淡的水印——仍然半透明。
- 不会被压平到白色或黑色背景上。图片和它的蒙版分开保存,就像在 PNG 中一样。
一个小细节:半透明像素的颜色最多可能相差 255 级中的 1 级。浏览器以预乘(premultiplied)形式处理这类像素,舍入会留下这点痕迹。你看不出来。
以较早的方式标记透明颜色的 PNG——带 tRNS 数据块的调色板图片和色键图片——同样可以打开。
为什么透明部分看起来是白色
PDF 页面是白色的。阅读器绘制页面时,会把图片画在这层白色之上,所以凡是图片透明的地方,你看到的都是页面——而页面是白色的。透明背景的标志看起来就像印在白纸上的标志。窗口截图的阴影会渐隐到白色里,而不是渐隐到你的桌面上。
透明度仍然在文件中。在其他颜色上显示页面的阅读器,或从 PDF 中提取图片的工具,得到的是图片连同它的蒙版。
由此可以得出两点:
- 浅色图形可能会消失。 透明背景上的白色标志或白色文字确实在 PDF 中,但在白色页面上没有任何东西能把它衬托出来。如果它必须可见,请在添加之前给它加上背景。
- 检查抠图的边缘。 在深色背景上抠出的图片,半透明的边缘像素有时会带一圈深色杂边。在白色页面上,这圈杂边就会显现出来。它一直都在 PNG 里;PDF 只是把它显示出来。
文件更小同样保留透明度
页面设置中的两个选项都不会丢弃 alpha 通道。选择质量优先时,图片连同软蒙版以无损方式存储。选择文件更小时,大图片会得到一个更小的候选版本,它仍然是无损的,并且仍然带有软蒙版;长边为 2000 px 或更小的图片完全不会改变。两个选项都不会把 PNG 转换成 JPEG——一种不支持透明度的格式。候选版本何时被采用,见 PNG 质量与 PDF 大小。
我们检查了哪些阅读器
我们用透明的测试 PNG 生成 PDF,并在相互独立的 PDF 引擎中打开:Poppler(许多 Linux 查看器背后的引擎)、Apple 的 Core Graphics 和 PDFKit、PDFium(Chrome 内置查看器的引擎)以及 pdf.js(Firefox 的内置查看器)。在白色页面上绘制时,它们显示的结果都与预期相差不超过 255 级中的 1 级。
这说的是页面的显示效果。某个应用在打印、编辑或转换你的 PDF 时如何处理透明度,取决于那个应用,我们没有逐一测试。
每张图片在页面上显示多大、周围留下多少空白,见 PNG 图片的页面尺寸。
在浏览器中生成 PDF → PNG to PDF