Конвертировать PDF в TIFF с CMYK и прозрачностью
Я пытаюсь преобразовать PDF в TIFF и сохранить цветовое пространство CMYK и прозрачные области в PDF. Есть много сообщений, в которых говорится "просто используйте PNG", но для моего приложения цветовое пространство CMYK является обязательным, и PNG не поддерживает CMYK. Я начал работать над этим с помощью Imagemagick (IM) и имел ограниченный успех, но пока имел лучшие результаты при непосредственном использовании Ghostscript (что в любом случае используется IM под капотом). Проблема, которая постоянно возникает, заключается в том, что прозрачные области из PDF заполнены белым.
Контекст: Ubuntu 16.04.3 LTS (AWS), Ghostscript 9.23, ImageMagick 7.0.7-36
Я создал тестовый PDF с прозрачным фоном и перекрывающимися блоками сплошных и полупрозрачных цветов: trans-test.pdf
Я проверил, что PDF имеет правильные прозрачные области. Если я использую PNG (и, следовательно, цветовое пространство RGB), я получаю результирующее изображение, которое имеет совпадающие прозрачные области как PDF, но, увы, неправильное цветовое пространство: output.png
(помните: веб-браузеры покажут его на белом фоне, но он действительно прозрачный)
Для конверсий я пробовал варианты следующих команд (упрощено для публикации):
Imagemagick: convert -depth 8 -colorspace CMYK trans-test.pdf output.tif
Ghostscript: gs -sDEVICE=tiff32nc -sOutputFile=output_gs.tif -r144 trans-test.pdf
В IM делегат для обработки PDF-файлов CMYK использует устройство pamcmyk32. Некоторые предлагают изменить это на pngalpha, но это вызывает нежелательное изменение в цветовом пространстве RGB. Некоторые предлагают преобразовать сначала в PNG, а затем обратно в CMYK, но это приводит к потере цветных данных.
При непосредственном использовании Ghostscript ни одна из опций устройства для TIFF не имеет опций для прозрачности. Поработав некоторое время, я нашел старый ответ от разработчика в Artifex (KenS), в котором говорилось, что "Что касается TIFF, в GS нет поддержки для прозрачности немаркированных областей". Конверсия... не поддерживает прозрачность
Это было обескураживающим, но это было с 2011 года, поэтому я надеюсь, что к этому вопросу уже есть какое-то решение. Я ищу некоторые изменения в конфигурации Ghostscript, которые позволят мне установить прозрачность всех немаркированных областей или начать со страницы, стертой как прозрачную, а не белую.
Формат файла TIFF поддерживает как цветовое пространство CMYK, так и прозрачность, поэтому должен быть способ получить оба в одном файле. Любое понимание того, как получить оба в TIFF будет приветствоваться на этом этапе. Спасибо за прочтение.
2 ответа
Потребуются некоторые творческие решения, чтобы обойти ограничения делегатов - как указано в комментариях.
Я бы предложил извлечь прозрачность в промежуточную маску и повторно применить ее после включения каналов данных CMYKA.
# Create transparent mask (we don't care about colorspace, just grab the alpha channel values)
convert -depth 8 -colorspace sRGB trans-test.pdf -alpha Extract mask.png
# Apply mask _after_ enabling alpha channel
convert \( \
-depth 8 \
-colorspace CMYK \
trans-test.pdf \
-alpha Activate \
\) \
mask.png -compose CopyAlpha -composite output.tif
-alpha Activate
включите альфа-канал, но нет данных, поэтому все прозрачно. Следующий mask.png -compose CopyAlpha -composite
заполняет альфа-канал значениями, извлеченными из предыдущей операции.
Я сравнил свое решение с emcconville. Его подход должен быть хорошим, но мое профильное решение, кажется, лучше соответствует цветам в сохраненных tif-файлах, отображаемых в Mac OSX Sierra Preview, GraphicConverter и Photoshop. Приведенные ниже команды представляют собой синтаксис Unix в IM 7.0.7.37 QRI HDRI и LIBTIFF версии 4.0.9 Ghostscript 9.23. Вы можете увидеть свои версии от magick -list format
,
Входные данные: trans-test.pdf
Мое решение:
magick -depth 8 -colorspace sRGB trans-test.pdf \
-profile /Users/fred/images/profiles/sRGB.icc \
-profile /Users/fred/images/profiles/USWebCoatedSWOP.icc \
trans-test_profile.tif
Решение Emcconville:
magick -depth 8 -colorspace sRGB trans-test.pdf -alpha Extract mask.png
magick \( -depth 8 -colorspace CMYK trans-test.pdf \) \
mask.png -alpha off -compose CopyOpacity -composite \
trans-test_mask.tif
Обратите внимание, что -compose copyOpacity или copyAlpha обычно требуют выключения -alpha. Поэтому я не вижу смысла добавлять -альфа-активацию.
Вот мои делегаты:
Version: ImageMagick 7.0.7-37 Q16 x86_64 2018-05-30 https://www.imagemagick.org
Copyright: © 1999-2018 ImageMagick Studio LLC
License: https://www.imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules OpenMP
Delegates (built-in): bzlib cairo djvu fftw fontconfig freetype gslib gvc jbig jng jp2 jpeg lcms lqr ltdl lzma openexr png ps raw rsvg tiff webp x xml zlib