使用GhostScript导出固定大小的PNG

时间:2017-09-12 19:17:28

标签: png ghostscript eps

我们有很多方形EPS图像,我们希望通过脚本以非常特定的格式/尺寸输出到PNG,即

  • 8192x8192,灰度,无alpha,无抗锯齿
  • 2048x2048,灰度,无alpha,抗锯齿。

我们没有运气脚本“专业”工具Photoshop或Illustrator来做到这一点(虽然我们可以通过UI这样做,他们的弱脚本支持不能控制alpha或精确的图像导出大小,所以我们要么总是在大图像中获取alpha,或者我们有时会获得稍微不准确的图像大小,这会破坏后续算法。)

我们首次尝试制作高分辨率版本的是:

gs -sDEVICE=pnggray -o cover.png -dDEVICEWIDTHPOINTS=8192 -dDEVICEHEIGHTPOINTS=8192 -dGraphicsAlphaBits=1 -dPDFFitPage=true cover.eps

但是,这似乎没有按照预期调整图像大小以填充框。

有一种方法,给定平方EPS,让Ghostscript做我们想要的吗?

2 个答案:

答案 0 :(得分:0)

您对EPS文件的问题是他们没有请求媒体大小。这是因为EPS文件旨在包含在其他PostScript程序中,因此需要通过生成PostScript的应用程序来调整它们的大小。

为此,EPS文件包含定义EPS的BoundingBox的注释(PostScript解释器忽略)。放置EPS的应用程序可以快速扫描EPS以查找此信息,然后在正在创建的最终PostScript程序中正确设置CTM并插入EPS的内容。

Ghostscript中的FitPage开关依赖于具有已知媒体大小(您应该在使用此时设置-dFIXEDMEDIA)和请求的媒体大小,确定要应用于请求的比例因子为了使其适合实际尺寸,并设置CTM以应用该缩放。

如果您没有收到媒体尺寸请求(您赢得了EPS),则不会进行缩放。

现在Ghostscript 确实有一个不同的开关,EPSCrop从EPS中获取注释并使用它来设置媒体大小(Ghostscript有机制允许处理此注释原因,除其他外)。您可以实现类似的机制来获取BoundingBox注释,并缩放EPS以使其符合所需的目标媒体大小。

我可能会把事情搞砸了,但是我不得不在创建一个示例文件来处理......

答案 1 :(得分:0)

不要在上面的命令行中意外指定PDFFitPage。处理EPS文件时指定EPSFitPage。 PDFFitPage将无声无息。