Ghostscript:在保持纵横比的同时设置像素宽度,EPS到PNG
Posted
技术标签:
【中文标题】Ghostscript:在保持纵横比的同时设置像素宽度,EPS到PNG【英文标题】:Ghostscript: Set pixel width while maintaing aspect ratio, EPS to PNG 【发布时间】:2015-10-05 22:25:47 【问题描述】:我通读了使用文档,但找不到任何方法来输出 X 像素宽的图像,其高度由纵横比决定。我有大量需要光栅化的 EPS 文件,它们至少需要 2400 像素宽。我目前的解决方法是使用-r
标志设置通常足够高的分辨率,但这会使许多图像比我需要的要大得多。
我目前正在使用这个命令:
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 的任何要求。
【讨论】:
我尝试查看 PostScript,但是除了 Adobe 的 this monstrous pdf reference guide 之外,我找不到包含相关信息的简洁指南或教程。我还找到了this answer,但我不知道代码中到底发生了什么。我可以用来学习如何做您刚才描述的事情的最佳资源是什么? 这是我的答案,你不希望这样。 PostScript 是一种编程语言,如果你想用它做任何建设性的事情,恐怕你至少必须学习一些语言。 PLRM 可能看起来很大,但对于一门完整的语言来说它非常紧凑,而且写得很好。您可以搜索涉及 BeginPage 的其他答案,我有理由相信您会从我这里找到一些,可能还有其他答案。我会推荐 John Deubert 的 Acumen Training (acumentraining.com/acumenjournal.html) 站点以获取 PostScript 指南。 2001 年 7 月有一篇关于使用 BeginPage 和 EndpPage 的文章 谢谢肯。我会研究你建议的资源。以上是关于Ghostscript:在保持纵横比的同时设置像素宽度,EPS到PNG的主要内容,如果未能解决你的问题,请参考以下文章