使用 Imagemagick 将 eps 转换为 png

Convert eps to png using Imagemagick

我知道已经发布了类似的问题,但其中 none 似乎解决了我的问题,而且我对 Imagemagick 转换的手册页一无所知。我有一个简单的 EPS 图像,我想将其转换为 PNG。为了完整起见,这里是 EPS 文件的前几行——我在这个例子中称它为 myfile.eps。

%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 5 5 305 305
%%BeginProlog
%%EndProlog

% Particle 14
160.631 121.588 6.99204 0 360 arc closepath
0 0 1 setrgbcolor fill

这是图像本身: Encapsulated Postscript Image Example

图像由一组蓝色圆圈组成。我想将图像从命令行转换为具有相同图像尺寸的 PNG。当我使用这个命令时:

convert myfile.eps myfile.png

图像最终出现在 612x792 像素的 PNG 文件的左下角,其他地方有大量白色 space。

Example PNG converted from EPS

接下来,我尝试了 -crop、-resize 以及它们的各种组合,但这通常会给我很多单独的 PNG 文件,这些文件显示整个 612x792 图像的一小部分。我很确定 -crop 应该可以工作,但我显然还没有弄清楚如何正确指定裁剪尺寸。

在转换为 PNG 时保留图像边界框的技巧是什么?

在这种情况下,修剪图像(去除边缘周围的空白)似乎很简单:

magick image.eps -trim result.jpg

如果根据您的喜好将其修剪得太紧,您可以重新添加一个 10 像素宽的边框,为其留出呼吸空间,如下所示:

magick image.eps -trim -bordercolor white -border 10 result.jpg

如果您发现在其他情况下需要使用 -crop,您很可能在获取大量输出图像时遇到问题,因为您没有指定偏移量。因此,例如,如果您想从西南角裁剪 150x120,请设置重力并使用 +0+0 的偏移量,如下所示:

magick image.eps -gravity southwest -crop 150x120+0+0 result.jpg


我还看到 exiftool 报告了如下边界框:

exiftool image.eps
ExifTool Version Number         : 12.00
File Name                       : image.eps
Directory                       : .
File Size                       : 25 kB
File Modification Date/Time     : 2021:05:04 07:58:44+01:00
File Access Date/Time           : 2021:05:04 08:00:11+01:00
File Inode Change Date/Time     : 2021:05:04 07:58:44+01:00
File Permissions                : rw-r--r--
File Type                       : EPS
File Type Extension             : eps
MIME Type                       : application/postscript
Bounding Box                    : 5 5 305 305                 <--- HERE
Image Height                    : 300
Image Width                     : 300
Image Size                      : 300x300
Megapixels                      : 0.090

这也给出了一个合理的结果:

magick image.eps -gravity southwest -crop 305x305+0+0 result.jpg

我不确定这些方法中的任何一种是否对您的所有图像都可靠,因此您可能需要试验并报告任何有问题的文件。或者可能有更好的方法。


您可以使用 awk 从 EPS 中提取 BoundingBox,如下所示:

bbox=$(awk '/%%BoundingBox:/ {printf("%dx%d+%d+%d",,,,); exit }' image.eps)

然后像这样使用它:

magick image.eps -gravity southwest -crop "$bbox"  result.jpg