Конвертировать PDF в TIFF с CMYK и прозрачностью - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь преобразовать 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 делегат для обработки файлов CMYK использует устройство pamcmyk32.Некоторые предлагают изменить это на pngalpha, но это вызывает нежелательное изменение в цветовом пространстве RGB.Некоторые предлагают преобразовать сначала в PNG, а затем обратно в CMYK, но это приводит к потере цветных данных.

При непосредственном использовании Ghostscript ни одна из опций устройства для TIFF не имеет опций для прозрачности.Поработав некоторое время, я нашел старый пост-ответ от разработчика в Artifex (KenS), в котором говорилось, что «Что касается TIFF, в GS нет поддержки для того, чтобы сделать непомеченные области прозрачными» .: Преобразование ... делаетне поддерживать прозрачность

Это удручало, но это было с 2011 года, поэтому я надеюсь, что к этому вопросу уже есть какое-то решение.Я ищу некоторые изменения в конфигурации Ghostscript, которые позволят мне установить прозрачность всех немаркированных областей или начать со страницы, стертой как прозрачную, а не белую.

Формат файла TIFF поддерживает как цветовое пространство CMYK, так и прозрачность, поэтому должен быть способ получить оба в одном файле.Любое понимание того, как получить оба в TIFF будет приветствоваться на этом этапе.Спасибо за чтение.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

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

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

trans-test_mask.tif

Обратите внимание, что -compose copyOpacity или copyAlphaкак правило, требует -alpha off.Поэтому я не вижу смысла добавлять активацию -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
0 голосов
/ 30 мая 2018

Потребуются некоторые творческие решения, чтобы обойти ограничения делегатов - как указано в комментариях.

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

Example output with CMYKA

...