出于测试目的,我想从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:所以我的文件数据不正确我试过一个不同的文件,它的工作原理!
由于你没有(也不能)在这里发布整个程序,因此无法准确地告诉你什么是错的。猜测你有错误计算的字节数,以便Ghostscript过早地解释(并尝试解释图像数据)或者太晚而无法理解损坏的内容。
最有可能(从错误)它试图解释图像数据,它试图告诉你二进制值0x03没有被定义为运算符或过程或名称。
这可能是因为您刚刚从TIFF文件中读取数据并将其存储到数据流中。你不能这样做,TIFF是一种文件格式,它有一个标题和标签,数据可能会被压缩。 colorimage操作符期望您仅提供图像组件。
在传递数据之前,您需要剥离标头和标签,可能会解压缩数据流,处理偏移等。
This answer有一个链接到谷歌组与我前段时间写的PostScript程序读取TIFF文件。我真的不记得它是否会读取一个CMYK TIFF文件,但至少它会给你一些关于发生了什么的线索。我确定可以修改程序以读取CMYK TIFF文件(如果尚未执行此操作)。
您可以使用ps2write设备通过Ghostscript运行该程序(将其指向您的TIFF文件),它将生成一个包含CMYK图像的PostScript文件。
否则,您可以自己将图像组件提取到原始二进制数据,然后使用现有的PostScript将其包装起来。