首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未能将NCL高分辨率postscript转换为png

未能将NCL高分辨率postscript转换为png
EN

Stack Overflow用户
提问于 2013-04-18 08:43:40
回答 2查看 449关注 0票数 0

我从mpDataBaseVersion = "HighRes“(高分辨率地图)的NCL脚本中获得了一个postscript文件。我得到了ImageMagick 6.2.8在RHEL5.6 i386中运行。

当我运行convert high-resolution.ps test.png时,我得到了:

代码语言:javascript
复制
Error: /undefinedresult in --ashow--

Operand stack:
   0   0   ( )

Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1910   1   3   %oparray_pop   1909   1   3   %oparray_pop   1893   1   3   %oparray_pop   1787   1   3   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--

Dictionary stack:
   --dict:1171/1684(ro)(G)--   --dict:0/20(G)--   --dict:143/200(L)--

Current allocation mode is local
Current file position is 629039

但是相同的postscript在RHEL 3 i386和ImageMagick 5.5.6中没有错误地转换,为什么呢?

我在googled上搜索了一段时间,但我仍然不知道这种不确定的结果会导致怎样的错误。

执行堆栈意味着什么?

更新

谢谢,弗雷德和肯!

我调整了我的问题如下:

我有一个大的PostScript文件(9.3MB):

PC A:

  • 红帽企业Linux ES第3版(塔隆更新3) i386
  • 转换版本: ImageMagick 5.5.6 04/01/03 Q16
  • Ghostscript版本: GNU Ghostscript 7.05 (2002-04-22)

PC B:

  • 红帽企业Linux版本5.6 (Tikanga) i386
  • 转换版本: ImageMagick 6.2.8 05/07/12 Q16
  • Ghostscript版本: GPL Ghostscript 8.70 (2009-07-31)

convert high_resolution.ps high_resolution.png 在PC A中工作,但在PC B.中不工作

错误在上面。

我检查了Ghostscript的变化,我什么也没有得到(也许我只是错过了?)

非常感谢!謝謝!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-19 07:28:00

几乎可以肯定,您使用的是不同版本的Ghostscript ( ImageMagick使用它来处理PostScript)。您在每个版本上都安装了什么版本的Ghostscript?

未定义结果指的是它所说的,操作的结果是未定义的(这通常是由除以零引起的)。执行堆栈告诉您在解释器遇到错误时执行堆栈上的内容。除非您理解Postscript (老实说,Ghostscript解释器),否则它不会告诉您任何有意义的事情。

如果没有看到导致错误的文件,我就不能再说了。记住,PostScript是一种编程语言,所以错误消息只是一个起点。

更新

我已经检索了该文件,并且在运行Ghostscript的当前版本时,我可以确认获得了该错误。Acrobat提供了一个非常类似的错误(在setcachedevice中未定义结果),因此几乎可以肯定该文件是非法的。当我有机会确定原因的时候我会说更多的。

另外,这两个版本的Ghostscript都很老,现在的版本是9.07

更新2

违规行非常接近文件的开头:

/Helvetica 0 Fs 0 0()作为Gr

因为PostScript是一种编程语言,所以这个片段使用了程序中定义的一些过程。它所做的是找到一个名为“Helvetica”的字体,将其缩放为0,然后显示字符串“调整每个字形的宽度为0”。

其中有几个部分显然是胡说八道;将字体缩放到0将使其无用,最多一个字形将标记为1像素。使用操作符将每个字形的宽度调整为0的字符串显然没有意义。更聪明的软件不会产生这样的PostScript程序,但是生产者在生成PostScript方面显然不是很聪明,从非常简单的prolog到文件中都可以看到。

基本上问题就是GS所说的,x和y的宽度是用矩阵来调整的,而将矩阵乘法应用到字体大小为0的结果是真正没有定义的。

您最好的选择可能是回到原来的应用程序,删除导致文本“”发出的内容。

如果由于某种原因这是不可能的,您可以利用PostScript是一种编程语言这一事实,您可以自己重新定义/ashow操作符,如果字体大小为0,则让它什么也不做,例如:

/old_ashow /ashow load def /ashow {current字体/FontMatrix获得0 eq {pop pop }{old_ashow}old_ashow}绑定def的0 1 4 {pop add}

通常,我建议将它放入一个新的文件中,并在要处理的文件(如'gs mod.ps high_resolution.ps')之前通过Ghostscript运行它,但是因为您使用的是ImagMagick,所以不能这样做。因此,如果您想要这样做,您将需要修改high_resolution.ps文件并将其放在文件的顶部。无论何时修改PostScript文件,您都必须小心使用一个编辑器,它可以处理二进制文件,并且不更改CR/LF行尾。

请注意,我不建议这样做,最好是修复生成此PostScript程序的原始文件或脚本,以便您可以在其他地方使用它(例如打印)。目前,它正在生产非法的PostScript。

至于为什么这个错误不会出现在Ghostscript的旧版本中;这几乎肯定是一个疏忽。Adobe语言参考手册列出了每个操作符可能出现的错误,但没有列出引发错误的所有可能情况。显然,这个错误条件是在7.05发布后添加的,几乎可以肯定的是,当这个问题引起开发人员的注意时。

票数 1
EN

Stack Overflow用户

发布于 2013-04-20 22:24:42

ashow显示文本,并为字符添加额外的空间。堆栈0 0告诉系统向字符添加零额外空间。()是要显示的文本,它似乎是一个空格,但如果没有看到二进制文件,它也可能是一个不可显示的字符。

如果该字符是未定义的特殊字符,例如制表符或null,则未定义的结果将是有意义的。只有一个1字符的字符串也可能没有意义。

如前所述,什么版本的鬼怪脚本和实际的文件将是helpful.The的死后转储并不特别有用,但是执行堆栈看起来好像有一个更复杂的上下文正在产生错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16078316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档