Конвертировать 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 заполняет альфа-канал значениями, извлеченными из предыдущей операции.

Пример вывода с CMYKA

Я сравнил свое решение с 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

транс-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

транс-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
Другие вопросы по тегам