如何将 CMYK (tiff) 文件转换为 postscript 文件?
How do I convert CMYK (tiff) file in postscript file?
出于测试目的,我想从 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 编译,但它 return 一个我无法理解的错误。
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 一直 return 给我一个神秘的错误 :
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:
所以我的文件数据不正确我尝试使用不同的文件并且它有效!
由于您没有(也不能)post 此处的整个程序,因此无法准确告诉您哪里出了问题。据推测,您计算的字节数不正确,因此 Ghostscript 太早(并尝试解释图像数据)或太晚开始解释,无法理解损坏的内容。
很可能(从错误中)它试图解释图像数据,它试图告诉您二进制值 0x03 未定义为运算符或过程或名称。
这很可能是因为您刚刚直接从TIFF文件中读取数据并将其存储到数据流中。你不能那样做,TIFF 是一种文件格式,它有一个 header 和标签,并且数据可能会被压缩。 colorimage 运算符期望您 仅 提供图像组件。
您需要在提交数据之前剥离 header 和标签,可能解压数据流,处理偏移量等。
This answer 在 Google 组中有一个 link,其中包含我前段时间编写的用于读取 TIFF 文件的 PostScript 程序。老实说,我不记得它是否会读取 CMYK TIFF 文件,但至少它会给你一些关于正在发生的事情的线索。我确信可以修改程序以读取 CMYK TIFF 文件(如果它还没有这样做的话)。
您可以使用 ps2write 设备通过 Ghostscript 运行 该程序(将其指向您的 TIFF 文件),它会生成一个包含 CMYK 图像的 PostScript 文件。
否则,您可以自己将图像组件提取为原始二进制数据,然后使用现有的 PostScript 将其包装起来。
出于测试目的,我想从 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 编译,但它 return 一个我无法理解的错误。
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 一直 return 给我一个神秘的错误 :
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: 所以我的文件数据不正确我尝试使用不同的文件并且它有效!
由于您没有(也不能)post 此处的整个程序,因此无法准确告诉您哪里出了问题。据推测,您计算的字节数不正确,因此 Ghostscript 太早(并尝试解释图像数据)或太晚开始解释,无法理解损坏的内容。
很可能(从错误中)它试图解释图像数据,它试图告诉您二进制值 0x03 未定义为运算符或过程或名称。
这很可能是因为您刚刚直接从TIFF文件中读取数据并将其存储到数据流中。你不能那样做,TIFF 是一种文件格式,它有一个 header 和标签,并且数据可能会被压缩。 colorimage 运算符期望您 仅 提供图像组件。
您需要在提交数据之前剥离 header 和标签,可能解压数据流,处理偏移量等。
This answer 在 Google 组中有一个 link,其中包含我前段时间编写的用于读取 TIFF 文件的 PostScript 程序。老实说,我不记得它是否会读取 CMYK TIFF 文件,但至少它会给你一些关于正在发生的事情的线索。我确信可以修改程序以读取 CMYK TIFF 文件(如果它还没有这样做的话)。
您可以使用 ps2write 设备通过 Ghostscript 运行 该程序(将其指向您的 TIFF 文件),它会生成一个包含 CMYK 图像的 PostScript 文件。
否则,您可以自己将图像组件提取为原始二进制数据,然后使用现有的 PostScript 将其包装起来。