Все руководства

Как ведёт себя прозрачность PNG в PDF

У многих изображений PNG есть прозрачные участки: логотип без фона, иконка, диаграмма, экспортированная на прозрачном фоне, вырезанный снимок товара, мягкая тень вокруг скриншота окна. PNG хранит это в дополнительном канале — альфа-канале, — который для каждого пикселя говорит, насколько тот непрозрачен: полностью, совсем нет или где-то посередине. Эта статья о том, что PNG to PDF делает с этим каналом и почему результат на экране может вас удивить.

Прозрачность попадает в PDF

PDF тоже умеет хранить прозрачность — в виде мягкой маски: отдельного изображения в оттенках серого, которое хранится рядом с картинкой и сообщает программе просмотра, насколько показывать каждый пиксель. PNG to PDF записывает альфа-канал вашего PNG в такую маску, 8 бит на пиксель. В браузерах на основе Chromium, например Chrome и Edge, маска содержит точные значения из вашего файла. В Safari альфа у PNG в оттенках серого с прозрачностью и у 16-битных PNG может отличаться на 1 уровень из 255 — глазом этого не увидеть. Поэтому:

Одна мелочь: цвет полупрозрачного пикселя может отличаться не более чем на 1 уровень из 255. Браузеры обрабатывают такие пиксели в предумноженном виде, и округление оставляет этот след. Заметить его невозможно.

PNG, которые отмечают прозрачные цвета по-старому — изображения с палитрой и с цветовым ключом в блоке tRNS, — тоже открываются.

Почему прозрачные части выглядят белыми

Страница PDF белая. Когда программа просмотра рисует страницу, она накладывает изображение поверх этого белого, и там, где изображение прозрачно, вы видите страницу — а страница белая. Логотип с прозрачным фоном выглядит как логотип, напечатанный на белой бумаге. Тень скриншота окна растворяется в белом, а не в вашем рабочем столе.

При этом прозрачность остаётся в файле. Программа просмотра, которая показывает страницу на другом цвете, или инструмент, который извлекает изображение из PDF, получает картинку вместе с её маской.

Отсюда два следствия:

«Файл меньше» тоже сохраняет прозрачность

Ни один из вариантов в разделе Параметры страницы не выбрасывает альфа-канал. С вариантом Качество важнее изображение хранится без потерь вместе с мягкой маской. С вариантом Файл меньше для большого изображения готовится уменьшенный кандидат — тоже без потерь и тоже с мягкой маской; изображения в 2000 px и меньше по длинной стороне вообще не меняются. Ни один вариант не превращает PNG в JPEG — формат, в котором нет прозрачности. Когда используется кандидат, объясняет статья качество PNG и размер PDF.

Какие программы просмотра мы проверили

Мы сделали PDF из тестовых PNG с прозрачностью и открыли их в независимых движках PDF: Poppler (движок многих программ просмотра в Linux), Core Graphics и PDFKit от Apple, PDFium (движок встроенного просмотрщика Chrome) и pdf.js (встроенный просмотрщик Firefox). Поверх белой страницы каждый из них показал ожидаемый результат с отклонением не более 1 уровня из 255.

Это касается того, как выглядит страница. Как конкретное приложение обращается с прозрачностью, когда печатает, редактирует или конвертирует ваш PDF, зависит от этого приложения, а проверили мы не все.

Насколько крупно каждое изображение стоит на странице и сколько белого остаётся вокруг, рассказано в статье размер страницы для изображений PNG.

Создайте PDF в браузере → PNG to PDF