出于测试目的,我想从Tiff文件创建一个Postscript文件。图像处于CMYK模式,我不想将其转换为RGB。
我在Windows上,并使用Ghostscript查看后记文件。我尝试使用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: 因此,我的文件数据不正确,我尝试使用其他文件,并且可以正常工作!
答案 0 :(得分:0)
由于您没有(也不能)在此处发布整个程序,因此无法确切告诉您出了什么问题。猜测是您错误地计算了字节数,因此Ghostscript进行解释的时间太早(尝试解释图像数据)或太晚而无法理解损坏的内容。
很可能(由于错误)尝试解释图像数据,试图告诉您二进制值0x03没有定义为运算符,过程或名称。
这可能是因为您刚刚直接从TIFF文件中读取了数据并将其存储到数据流中。您不能这样做,TIFF是一种文件格式,它具有标题和标签,并且数据可能会被压缩。 colorimage运算符期望您仅提供 图像组件。
在提交数据之前,您需要剥离标题和标签,可能解压缩数据流,处理偏移量等。
This answer包含一个指向Google组的链接,该组具有我之前编写的PostScript程序,用于读取TIFF文件。老实说,我无法回忆起它是否会读取CMYK TIFF文件,但至少会为您提供一些有关发生情况的线索。我确定该程序可以修改为读取CMYK TIFF文件(如果尚未这样做的话)。
您可以使用ps2write设备通过Ghostscript运行该程序(将其指向TIFF文件),它将生成一个PostScript文件,其中将包含您的CMYK图像。
否则,您可以自己将图像组件提取为原始二进制数据,然后将其与现有的PostScript打包在一起。