2015-10-05 28 views
1

我通读了使用说明文档,找不到任何方式输出宽度为X像素的图像,高度由宽高比决定。我有大量需要栅格化的EPS文件,它们至少需要2400像素宽。我目前的解决方法是使用-r标志来设置通常足够高的分辨率,但这会使许多图像变得非常大,比我需要的要大得多。Ghostscript:在保持宽高比的同时设置像素宽度,将EPS设置为PNG

我目前使用这个命令:

gs -dNOPAUSE -sDEVICE=pngalpha -dEPSCrop -sOutputFile=./result.png -r500x500 -dEPSFITPAGE -dBATCH -dQUIET ./input.eps 

我已经尝试了不同的组合和-g-dDEVICEWIDTH-dDEVICEHEIGHT-dFIXEDMEDIA-dFIXEDRESOLUTION-dFitPage,但我无法弄清楚设置。

我有一种感觉,可能需要一些种类的数学来简单地设置-r的正确值,这将产生所需的尺寸,但我不知道如何去做这件事。任何帮助感谢!

回答

1

您不能指定(从命令行)任何将修改一个维度并使其他维度重新缩放的任何内容。

您可以通过在PostScript中编程来实现此目的。媒体大小请求由setpagdevice处理,您可以重新定义setpagedevice,以便预处理媒体大小请求或创建修改媒体大小的BeginPage过程。

重新定义setpagedevice可能是最简单的。编写一个例程,检查所请求的宽度和高度以及HWResolution的当前值。将其与已知的目标值进行比较(如果需要,可以使用-d =将其存储在PostScript字典中)计算所需的比例因子并将其应用于请求的宽度和高度,然后适当更改所请求的值并将它们传递给原始setpagedevice定义。

这也排除了任何要求设置DEVICEWIDTHPOINTS,DEVICEHEIGHTPOINTS或FIXEDMEDIA。

+0

我试图寻找到的PostScript,但是我找不到包含的相关信息,除[这个可怕的PDF简洁导游或教程参考指南](https://www.adobe.com/products/postscript/pdfs/PLRM.pdf)。我也发现[这个答案](http://stackoverflow.com/a/10024458/441212),但我不知道代码中究竟发生了什么,什么是最好的资源可以用来学习如何做你刚刚描述的事情? – Julien

+0

这是我的答案,你不想那样。 PostScript是一种编程语言,如果你想对它做任何有建设性的事情,恐怕你至少要学习一些语言。 PLRM可能看起来很大,但对于一个完整的语言来说它非常紧凑,而且写得很好。您可以搜索其他涉及BeginPage的答案,我相当肯定您会从我这里找到一些,可能还有其他的。我会推荐John Deubert的Acumen Training(http://www.acumentraining.com/acumenjournal.html)网站来获取PostScript指南。 2001年7月有关于使用BeginPage和EndpPage的文章 – KenS

+0

谢谢Ken。我会研究你的建议资源。 – Julien

相关问题