封装后记最大行数限制
Encapsulated poscript max line limit
我认为我超出了 EPS 最大线路限制:
我正在以编程方式生成包含图片网格的 eps。
我的 EPS 具有以下结构:
%!PS-Adobe-3.0 EPSF-3.0
.
.
%%BeginProlog
%%EndProlog
%%Page: 1 1
%%Begin Raster Image. Index: 0
save
449 2576 translate
0 rotate
-282 -304 translate
[1 0 0 1 0 0] concat
0 0 translate
[1 0 0 1 0 0] concat
0 0 translate
userdict begin
DisplayImage
0 0
564 608
12
564 608
0
0
FBDBB9FBDCBCFDDBBAFFD8B2FFD7A9FED4A1FCD29CFDD09EFED0A2FFD0A6FFCDA3FFCBA0FFCBA0...
EED79CEBD09CEDD19EEED2A1EFD3A3F0D4A5F0D4A6F0D4A7F1D4A4F3D4A0F3D49F
end
restore
%%End Raster Image
%%Begin Raster Image. Index: 1
.
.
end
restore
%%End Raster Image
%%Begin Raster Image. Index: 2
etc
所以问题是,如果我将最多 4 张图像写入 EPS,一切正常,但当我尝试写入第 5 张时,EPS 将无法在任何 EPS 查看器(包括 Adobe Illustrator)上打开(该操作无法由于未知错误而完成)。
我尝试使用不同的图像来确保特定图像没问题并且我得到了相同的结果,只要我正在编写 4 个图像(105825 行文件)一切正常。但是当我使用 5(132253 行文件)时它失败了。
我是否可能超出了 EPS 的最大线路限制?
如果您想分析这些文件,这些文件是有问题的:
有效的 - >https://files.fm/u/bfn2d32m 和无效的 ->
https://files.fm/u/4gbybr3y
在 PostScript 或 EPS 中没有 'line limit',所以你不能打那个。
当我通过 Ghostscript 运行 您的文件时,它会在 yImage 中抛出错误 /undefined(我建议您使用适当的 PostScript 解释器而不是 Adobe Illustrator 调试 PostScript)。
这向我表明,您的一张图片使用的数据比您提供的多,因此解释器 运行 停止了数据的末尾,消耗了部分程序,直到它读取了足够的数据当前文件中的字节以满足请求。此时再次开始将文件作为 PostScript 处理,但文件指针现在指向下一个 'DisplayImage' 的 'yImage'。由于您尚未定义 'yImage' 密钥,因此自然会出现 'undefined' 错误。
根据您的描述,这似乎是第 4 张图片,因为添加第 5 张图片会引发错误。请注意,如果您的程序在没有提供足够数据的情况下终止(因此解释器到达 EOF),那么将绘制提供的数据。因此,它可能看起来好像您的第 4 张图片是正确的,即使它不是,只要它后面没有任何进一步的程序代码。
样式注释; PostScript 是一种基于堆栈的语言,因此通常会通过将值压入堆栈并从那里读取它们来继续,而不是执行 'token' 运算符。
因此您的输入更像是:
0 0
564 608
12
564 608
0
0
DisplayImage
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
...
DisplayImage 代码为:
/DisplayImage
{
%
% Display a DirectClass or PseudoClass image.
%
% Parameters:
% x & y translation.
% x & y scale.
% label pointsize.
% image label.
% image columns & rows.
% class: 0-DirectClass or 1-PseudoClass.
% compression: 0-none or 1-RunlengthEncoded.
% hex color packets.
%
gsave
/buffer 512 string def
/byte 1 string def
/color_packet 3 string def
/pixels 768 string def
/compression exch def
/class exch def
/rows exch def
/columns exch def
/pointsize exch def
scale
translate
例如,这避免了您必须使用令牌进行缩放和平移操作。
我认为我超出了 EPS 最大线路限制: 我正在以编程方式生成包含图片网格的 eps。 我的 EPS 具有以下结构:
%!PS-Adobe-3.0 EPSF-3.0
.
.
%%BeginProlog
%%EndProlog
%%Page: 1 1
%%Begin Raster Image. Index: 0
save
449 2576 translate
0 rotate
-282 -304 translate
[1 0 0 1 0 0] concat
0 0 translate
[1 0 0 1 0 0] concat
0 0 translate
userdict begin
DisplayImage
0 0
564 608
12
564 608
0
0
FBDBB9FBDCBCFDDBBAFFD8B2FFD7A9FED4A1FCD29CFDD09EFED0A2FFD0A6FFCDA3FFCBA0FFCBA0...
EED79CEBD09CEDD19EEED2A1EFD3A3F0D4A5F0D4A6F0D4A7F1D4A4F3D4A0F3D49F
end
restore
%%End Raster Image
%%Begin Raster Image. Index: 1
.
.
end
restore
%%End Raster Image
%%Begin Raster Image. Index: 2
etc
所以问题是,如果我将最多 4 张图像写入 EPS,一切正常,但当我尝试写入第 5 张时,EPS 将无法在任何 EPS 查看器(包括 Adobe Illustrator)上打开(该操作无法由于未知错误而完成)。 我尝试使用不同的图像来确保特定图像没问题并且我得到了相同的结果,只要我正在编写 4 个图像(105825 行文件)一切正常。但是当我使用 5(132253 行文件)时它失败了。
我是否可能超出了 EPS 的最大线路限制? 如果您想分析这些文件,这些文件是有问题的: 有效的 - >https://files.fm/u/bfn2d32m 和无效的 -> https://files.fm/u/4gbybr3y
在 PostScript 或 EPS 中没有 'line limit',所以你不能打那个。
当我通过 Ghostscript 运行 您的文件时,它会在 yImage 中抛出错误 /undefined(我建议您使用适当的 PostScript 解释器而不是 Adobe Illustrator 调试 PostScript)。
这向我表明,您的一张图片使用的数据比您提供的多,因此解释器 运行 停止了数据的末尾,消耗了部分程序,直到它读取了足够的数据当前文件中的字节以满足请求。此时再次开始将文件作为 PostScript 处理,但文件指针现在指向下一个 'DisplayImage' 的 'yImage'。由于您尚未定义 'yImage' 密钥,因此自然会出现 'undefined' 错误。
根据您的描述,这似乎是第 4 张图片,因为添加第 5 张图片会引发错误。请注意,如果您的程序在没有提供足够数据的情况下终止(因此解释器到达 EOF),那么将绘制提供的数据。因此,它可能看起来好像您的第 4 张图片是正确的,即使它不是,只要它后面没有任何进一步的程序代码。
样式注释; PostScript 是一种基于堆栈的语言,因此通常会通过将值压入堆栈并从那里读取它们来继续,而不是执行 'token' 运算符。
因此您的输入更像是:
0 0
564 608
12
564 608
0
0
DisplayImage
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
...
DisplayImage 代码为:
/DisplayImage
{
%
% Display a DirectClass or PseudoClass image.
%
% Parameters:
% x & y translation.
% x & y scale.
% label pointsize.
% image label.
% image columns & rows.
% class: 0-DirectClass or 1-PseudoClass.
% compression: 0-none or 1-RunlengthEncoded.
% hex color packets.
%
gsave
/buffer 512 string def
/byte 1 string def
/color_packet 3 string def
/pixels 768 string def
/compression exch def
/class exch def
/rows exch def
/columns exch def
/pointsize exch def
scale
translate
例如,这避免了您必须使用令牌进行缩放和平移操作。