Ваш подход к этой задаче не работает.
Используемая вами команда преобразует всю страницу PDF формата Letter (612 x 792 pt) в изображение PNG.
Однако исходный размер изображения, встроенного в страницу PDF (612 x 792 pt), составляет 800 x 600 пикселей. Это можно увидеть, запустив pdfimages -list
:
pdfimages -list dice.pdf
page num type width height color comp bpc enc interp object ID x-ppi y-ppi size ratio
----------------------------------------------------------------------------------------
1 0 image 800 600 rgb 3 8 image no 12 0 72 72 277K 20%
1 1 smask 800 600 gray 1 8 image no 12 0 72 72 50.1K 11%
Итак, это первая проблема при преобразовании страницы PDF: она не дает правильного размера содержащихся изображений.
Однако вторая, более фундаментальная проблема заключается в следующем: любое изображение, полученное в результате преобразования страницы PDF, представляет собой комбинацию всех объектов PDF, наложенных друг на друга, поскольку они находятся в области страницы. . (Конечно, вы можете обрезать только часть страницы, но это также дает вам комбинацию всех объектов PDF из обрезанной области...). Результаты этого вы сталкивались, когда пытались преобразовать все белые пиксели в прозрачные: поскольку изначально разные объекты сливаются в одно представление пикселей, вы больше не можете различать их как требуется.
Вам следует выбрать другой подход и использовать другой инструмент для извлечения изображения: используйте pdfimages
(инструмент, использованный выше с параметром -list
для отображения свойств изображения со страниц PDF) . Как видите, список содержит два изображения: одно — растровое изображение RGB, другое — растровое изображение в градациях серого, получившее название типа smask
(мягкая маска).
Вот команда для извлечения обоих изображений в формате PNG:
pdfimages -png dice.pdf dice-images
Это извлечет два:
dice-images-0000.png
(цветное изображение)
dice-images-0001.png
(изображение в градациях серого)
(Примечание. Только самые последние версии pdfimages
, версии Poppler, позволяют извлекать изображения в формате PNG. В формате PDF нет такого понятия, как PNG. Есть только растровые данные, сжатые с Методы. Старые версии могут извлекать изображения только в формате PPM или PNM. Это не влияет на то, что я описываю ниже. Даже если вы извлекаете изображения PPM/PNM, эти два файла все равно можно обрабатывать, как описано ниже... )
Ниже приведен бок о бок, уменьшенный монтаж двух:
Как видите, у самого изображения фон не прозрачный, а белый. (У него нет альфа-канала.) В формате PDF эти два изображения используются в комбинации для создания прозрачных областей:
- то, что кажется полностью черным в софтмаске (справа), означает: этот пиксель реального изображения (слева) должен быть полностью прозрачным.
- то, что кажется полностью белым в софтмаске (справа), означает: этот пиксель реального изображения (слева) должен быть полностью непрозрачным.
- то, что отображается в оттенке серого в программной маске (справа), означает: этот пиксель реального изображения (слева) должен быть частично прозрачным (в соответствии с его уровнем серого/черного).
Чтобы объединить эти два файла (цветное изображение и софтмаску в градациях серого) обратно в один PNG с прозрачностью, вы можете использовать ImageMagick прямо сейчас...
person
Kurt Pfeifle
schedule
14.11.2014