2017-02-23 9 views
0

Я пытаюсь конвертировать PDF-файл (test.pdf, прилагается ниже), используя Ghostscript (9.20 на Windows), чтобы использовать только цветовое Graylevel (не RGB или CMY):Ghostscript для черно-белых приводит к неправильному graylevel

gswin64c.exe -sDEVICE=pdfwrite -sProcessColorModel=DeviceGray -sColorConversionStrategy=Gray -dOverrideICC -dUseCIEColor -o gray.pdf -f test.pdf 

результат действительно использует только серые цвета:

>gswin64c.exe -o - -sDEVICE=inkcov gray.pdf 
GPL Ghostscript 9.20 (2016-09-26) 
Copyright (C) 2016 Artifex Software, Inc. All rights reserved. 
This software comes with NO WARRANTY: see the file PUBLIC for details. 
Processing pages 1 through 1. 
Page 1 
0.00000 0.00000 0.00000 0.92673 CMYK OK 

(мне нужно использовать -dUseCIEColor, в противном случае CMY значения> 0, то это отдельная проблема, которую я решил пока нету ...)

My p roblem: Получаемый grey.pdf использует значительно разные graylevels, чем исходный test.pdf (открывайте в своем PDF-браузере и сравнивайте для себя).

Кто-нибудь видит мою ошибку или что я должен делать по-другому, чтобы получить тот же PDF-файл, но в оттенках серого, а не в цветовом пространстве RGB?

спасибо!

test.pdf: https://drive.google.com/open?id=0BzjatAIrG6P3S2F5Vng4cUhUS0U

gray.pdf: https://drive.google.com/open?id=0BzjatAIrG6P3cEtTY3JaaTJCS2c

+0

Не используйте -dUseCIEColor, вы начинаете двухэтапный процесс, который, несомненно, произведет неправильный ответ. – KenS

ответ

0

Вы делаете несколько преобразования, а не управление преобразования цветового пространства на всех.

Во-первых, вы преобразуете исходный цвет в цветовое пространство CIEBased (и пространство меняется в зависимости от количества компонентов в исходном пространстве). Поскольку вы не указываете словари цветопередачи, это неконтролируемое преобразование, вы используете значения по умолчанию.

Затем вы отправляетесь на другое преобразование из CIEBased (которое в общем случае не может быть представлено в PDF-формате, поэтому всегда приведет к дополнительному преобразованию) в DeviceGray. Опять же, вы не предоставили никаких профилей ICC для этого преобразования, поэтому вы используете стандартные.

Если вы настаиваете на использовании -dUseCIEColor (о котором я бы настоятельно советовал, чтобы это было сложно), вам необходимо предоставить словари ColorRendering для управления преобразованием из пространства устройства в пространство CIE, а также профили ICC для управления последующее преобразование из пространства CIE в DeviceGray.

Но я сильно подозреваю, что вы получите лучшие результаты, не используя -dUseCIEColor, как говорит Ghostscript.

+0

Большое спасибо, KenS! Я пробовал разные вещи с профилями ICC, также создавая свои собственные, но не смог добиться успеха. Мои знания об этом ограничены. Поэтому я остаюсь с чуть более темным серым. –

0

Я могу только догадываться о том, что вам нужно на основе исходного файла. Есть DeviceRGB 0.5/0.5/0.5 заполненный прямоугольник, и я подозреваю, что вы хотите, чтобы он стал 0.5 DeviceGray.

Решения и спекуляции ниже будут работать только для этого и подобных случаев. (Например, я понятия не имею, что такое «Значения CMY», о которых вы пишете, то есть если есть DeviceCMYK или ICC-based или что-нибудь еще в ваших файлах). Существуют простые формулы для преобразования между цветовыми пространствами устройства (см. Справочник по PDF), один из них действительно отображает от равных значений в DeviceRGB к тому же значению в DeviceGray. Для того, чтобы заставить его работать, используйте GhostScript9,10:

"C:\Program Files\gs\gs9.10\bin\gswin32c.exe" -sDEVICE=pdfwrite -sProcessColorModel=DeviceGray -sColorConversionStrategy=Gray -dUseFastColor -o test_1.pdf -f test.pdf 

Примечание переключатель -dUseFastColor. Вы получите «правильный» 0.5 полутоновых прямоугольников.

Чтобы заставить его работать в версиях 9,10 .. 9,20 (за исключением обоих), мне пришлось добавить еще один переключатель: -dPDFUseOldCMS. Опять же, 0,5 градаций серого цвета в результате.

Как видно из последнего названия переключателя, простые вещи, вероятно, считались устаревшими и выглядели как утерянные в 9.20.

Вместо этого был введен новый замечательный двигатель CMS (с 9.10). Кроме того, он не работает для устройств высокого уровня (включая pdfwrite). Либо отключен, либо отключен, для многих выпусков.

я не смог заставить его работать на любую комбинацию Device- или ICC на основе цвета в качестве источника можно выбрать и командную строку, чтобы сделать это на самом деле использовать опцию -sOutputICCProfile, либо для DeviceCMYK или DeviceGray выхода (или выхода ICC на основе , без разницы). Те же значения цвета в созданных файлах.

Я был бы признателен, если бы кто-то указал, что я ошибаюсь, и показывает противоположный пример.

Он работал, на самом деле (частично - только для устройства-источника цветов), в 9.10:

"C:\Program Files\gs\gs9.10\bin\gswin32c.exe" -sDEVICE=pdfwrite -sProcessColorModel=DeviceGray -sColorConversionStrategy=Gray -sOutputICCProfile=sgray.icc -o test_2.pdf -f test.pdf 

Используя различные результаты ICC-профилей в разных (и правильно, это выглядит) вывод. Чтобы преобразовать из равных значений RGB в одинаковые значения Серых, нужен будет профиль с оттенками серого с той же гаммой, что и (по умолчанию) sRGB. Просто используйте ICC Profile Inspector, чтобы извлечь кривую от sRGB и импортировать ее, например. sgray.icc (распространяется с Ghostscript).

Преимущество использования профиля для преобразования RGB в серый цвет, сохраняя гамму, в отличие от «простой формулы», описанной выше, может или не стоит усилий. Проверьте свои файлы и цели.

Смежные вопросы