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,但是除了 Adob​​e 的 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的主要内容,如果未能解决你的问题,请参考以下文章

c# 在保持纵横比的同时将图像调整为不同的大小

Andengine,缩放图像以填充屏幕大小,而不保持纵横比

缩放位图保持纵横比

ImageView 调整大小并保持纵横比

如何在保持图像纵横比的同时调整 UIButton 中的图像大小?

ImageMagick 缩放和裁剪保持纵横比