全部指南

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 级,肉眼看不出来。因此:

一个小细节:半透明像素的颜色最多可能相差 255 级中的 1 级。浏览器以预乘(premultiplied)形式处理这类像素,舍入会留下这点痕迹。你看不出来。

以较早的方式标记透明颜色的 PNG——带 tRNS 数据块的调色板图片和色键图片——同样可以打开。

为什么透明部分看起来是白色

PDF 页面是白色的。阅读器绘制页面时,会把图片画在这层白色之上,所以凡是图片透明的地方,你看到的都是页面——而页面是白色的。透明背景的标志看起来就像印在白纸上的标志。窗口截图的阴影会渐隐到白色里,而不是渐隐到你的桌面上。

透明度仍然在文件中。在其他颜色上显示页面的阅读器,或从 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