Как конвертировать файл CMYK (TIFF) в файл postscript? - PullRequest
0 голосов
/ 03 апреля 2019

Для целей тестирования я хочу создать файл postscript из файла Tiff. Изображение в режиме CMYK, и я не хочу преобразовывать его в RGB.

Я в Windows и использую Ghostscript для просмотра файла postscript. Я пытался использовать оператор colorimage, чтобы нарисовать цветное изображение из картинки, закодированной в шестнадцатеричном формате.


3508 2480 scale
3508 2480 8 [3508 0 0 -2480 0 2480]
{currentfile 4 3508 mul string readhexstring pop} bind
false 4 colorimage
49492a00080000001200fe00040001000000000000000001030001000000

-- More Hex Data --

Я ожидал, что это скомпилируется с ghostscript, но вернет ошибку, которую я не могу понять.

Error: /undefined in ??3
Operand stack:

Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
  --nostringval--   --nostringval--   false   1   %stopped_push   2045   1   3   %oparray_pop   2044   1   3   %oparray_
pop   2025   1   3   %oparray_pop   1884   1   3   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostr
ingval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
Dictionary stack:
   --dict:973/1684(ro)(G)--   --dict:0/20(G)--   --dict:78/200(L)--
Current allocation mode is local
Current file position is 4
GPL Ghostscript 9.26: Unrecoverable error, exit code 1


РЕДАКТИРОВАТЬ: Так что мне удалось извлечь необработанные двоичные данные небольшого изображения для проверки, благодаря Photoshop, и я хотел создать изображение с каждым источником данных для каждого цвета, поэтому один источник для голубого, один для пурпурного, ... И я получил этот файл :

/cyan { 
zz!!*'!s8W-!s8W-!zz!!*'!s8W-!s8W-!zz!!*'!s8W-!s8W-!zz!!*'!s8W-!s8W-!
  -- More Data --
} /ASCII85Decode filter def

/magenta {
s8W-!s8W-!s8N'!zzs8W-!s8W-!s8N'!zzs8W-!s8W-!s8N'!zzs8W-!s8W-!s8N'!
  -- More Data --
} /ASCII85Decode filter def

/yellow {
s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
  --More Data--
} /ASCII85Decode filter def

/black{
s8W-!s8W-!s8N'!zzs8W-!s8W-!s8N'!zzs8W-!s8W-!s8N'!zzs8W-!s8W-!s8N'!
  --More Data--
} /ASCII85Decode filter def

/DeviceCMYK setcolorspace

20 20 8 [20 0 0 20 0 0]
cyan
magenta
yellow
black
true 4 colorimage

Если вы хотите проверить полный код: https://pastebin.com/6MFtw0M0

Но Ghostscript продолжает возвращать мне загадочную ошибку:

Error: /undefined in --colorimage--
Operand stack:

Execution stack:
   %interp_exit   .runexec2   --nostringval--   colorimage   --nostringval--   2   %stopped_push   --nostringval--   col
orimage   colorimage   false   1   %stopped_push   2045   1   3   %oparray_pop   2044   1   3   %oparray_pop   2025   1
  3   %oparray_pop   1884   1   3   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   colo
rimage   --nostringval--   2   %stopped_push   --nostringval--   1913   10   3   %oparray_pop
Dictionary stack:
   --dict:973/1684(ro)(G)--   --dict:0/20(G)--   --dict:82/200(L)--
Current allocation mode is local
GPL Ghostscript 9.26: Unrecoverable error, exit code 1

РЕДАКТИРОВАТЬ2: Таким образом, данные моего файла были неверны, я попытался с другим файлом, и он работал!

1 Ответ

0 голосов
/ 03 апреля 2019

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

Скорее всего (из-за ошибки) он пытается интерпретировать данные изображения, пытается сказать вам, что двоичное значение 0x03 не определено как оператор или процедура или имя.

Вероятно, это потому, что вы только что прочиталиданные непосредственно из файла TIFF и сохраняются в потоке данных.Вы не можете этого сделать, TIFF - это формат файла, он имеет заголовок и теги, и данные могут быть сжаты.Оператор colorimage ожидает, что вы предоставите только компоненты изображения.

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

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

Вы можете запустить эту программу (указывая ее на свой файл TIFF) через Ghostscript, используя устройство ps2writeи он создаст файл PostScript, который будет содержать для вас изображение CMYK.

В противном случае вы можете самостоятельно извлечь компоненты изображения в необработанные двоичные данные, а затем обернуть их существующим PostScript.

...