如何在postscript文件中转换CMYK(tiff)文件?

问题描述 投票:0回答:1

出于测试目的,我想从Tiff文件创建postscript文件。图像处于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

EDIT2:所以我的文件数据不正确我试过一个不同的文件,它的工作原理!

postscript cmyk
1个回答
0
投票

由于你没有(也不能)在这里发布整个程序,因此无法准确地告诉你什么是错的。猜测你有错误计算的字节数,以便Ghostscript过早地解释(并尝试解释图像数据)或者太晚而无法理解损坏的内容。

最有可能(从错误)它试图解释图像数据,它试图告诉你二进制值0x03没有被定义为运算符或过程或名称。

这可能是因为您刚刚从TIFF文件中读取数据并将其存储到数据流中。你不能这样做,TIFF是一种文件格式,它有一个标题和标签,数据可能会被压缩。 colorimage操作符期望您仅提供图像组件。

在传递数据之前,您需要剥离标头和标签,可能会解压缩数据流,处理偏移等。

This answer有一个链接到谷歌组与我前段时间写的PostScript程序读取TIFF文件。我真的不记得它是否会读取一个CMYK TIFF文件,但至少它会给你一些关于发生了什么的线索。我确定可以修改程序以读取CMYK TIFF文件(如果尚未执行此操作)。

您可以使用ps2write设备通过Ghostscript运行该程序(将其指向您的TIFF文件),它将生成一个包含CMYK图像的PostScript文件。

否则,您可以自己将图像组件提取到原始二进制数据,然后使用现有的PostScript将其包装起来。

© www.soinside.com 2019 - 2024. All rights reserved.