Печатать монохромное изображение как цвет разделения в PDF

У меня возникают проблемы при попытке вставить изображения в PDF при изменении цветового пространства. Прямо сейчас у меня есть монохромное изображение png (8 бит, глубина 1 бит), где 1 — черный, а 0 — прозрачный (что-то вроде маски). Я хочу вставить это изображение в файл pdf и изменить цветовое пространство на разделение, потому что его нужно печатать с использованием плашечного цвета. Есть ли способ сделать это?

В настоящее время я пробовал это:

<</Type /XObject
/Subtype /Image
/Width 800
/Height 600
/ColorSpace <</CS0 6 0 R>>
/BitsPerComponent 1
/Filter /FlateDecode
/DecodeParms <</Predictor 15 /Colors 1 /BitsPerComponent 1 /Columns 800>>

Это цветовое пространство разделения:

6 0 obj
[/Separation /White 10 0 R
<<
/FunctionType 2
/N 1
/Range [0 1 0 1 0 1 0 1]
/C1 [1 0 0 0]
/Domain [0 1]
/C0 [0 0 0 0]

Я также пытался добавить встроенное определение цветового пространства, но это не сработало.


person trunco    schedule 25.06.2018    source источник
comment
В каком смысле "не получилось"? Ваше определение цветового пространства действительно неполное, вы не закрыли словарь для функции преобразования оттенка или закрыли массив цветового пространства, и вы не сказали, что такое объект 10 (я предполагаю, что это CMYK). Я удалил тег PostScript, потому что он не кажется уместным.   -  person KenS    schedule 25.06.2018


Ответы (1)


Вы уже довольно близко. Вы пропустили атрибут изображения, который сообщит этому, что ноль следует рассматривать как прозрачный, и вы сделали альтернативное пространство для цветового пространства разделения немного более сложным, чем требовалось. Я ожидал, что то, что вы написали (если бы оно было правильно закодировано), отображало графику в голубом и белом цветах и ​​​​накладывало любой основной материал.

Добавьте к изображению атрибут Mask, указав, что все значения от 0 до 0 должны быть замаскированы. Это сделает нулевые биты прозрачными.

Я бы не стал использовать белый цвет в качестве названия цвета разделения, так как это может привести к путанице, если вы действительно не рисуете биты 1 как белые, а нулевые биты не рисуете. Это было бы необычно, но я вижу, как это происходит. Если цвет, который вы хотите нарисовать, не может быть выражен в оттенках серого, я бы использовал очень простой альтернативный цвет серого устройства. Вы говорите, что изображение черное и прозрачное, поэтому использование DeviceGray было бы хорошим выбором.

Преобразование цвета разделения (0 — неотрисованный, 1 — черный) в альтернативное цветовое пространство (DeviceGray) так же просто, как инвертирование значения Input 1, которое становится DeviceGray 0, а input 0 становится DeviceGray 1. Таким образом, функция постскриптума самый быстрый, чтобы написать. {1 sub} – это все, что нужно.

<</Type /XObject
/Subtype /Image
/Width 800
/Height 600
/ColorSpace <<6 0 R>>
/BitsPerComponent 1
/Mask [0 0]
/Filter /FlateDecode
/DecodeParms <</Predictor 15 /Colors 1 /BitsPerComponent 1 /Columns 800>>
stream
………
endstream
endobj

6 0 obj
[/Separation /White /DeviceGray 7 0 R]
endobj

7 0 0bj
<< 
/FunctionType 4
/Range [0 1]
/Domain [0 1]
/length 7
>> 
Stream
{1 sub}
endstream
endobj
person Michael Mckeough    schedule 27.06.2018
comment
Привет, спасибо за ответ! На самом деле вы на 100% правы в наших намерениях :) Из-за требований нам нужно показать его голубым, но вывести 1 бит белым. Мы копались в спецификации PDF и теперь делаем тестовую печать со следующим кодом: .xyz/ Мы пытаемся сделать что-то похожее на ваш подход, потому что ваше решение выглядит чище. Еще раз, большое спасибо за ваше время! - person trunco; 29.06.2018