使用GraphicsMagick或ImageMagick调整图像大小时去除周围的空白。

5
我正在使用GraphicsMagick将图像调整大小为缩略图,但是它会添加一个白色的边框填充。下面是我使用的命令:gm convert matrix.jpg -resize "80x80>" -gravity center -extent 80x80 thumbnail.jpeg。如您所见,图像周围有一些白色填充,但我不想要这个。理想情况下,我希望(整个图像而不仅仅是裁剪)填充所需的80x80输出大小。请问如何在ImageMagick或GraphicsMagick中实现此效果?

你想修改宽高比吗?需要整张图片而非仅裁剪部分。 - A.L
请在您的问题中添加预期图像的示例。您可以使用免费工具,如Paint.NET、GIMP等。 - A.L
2个回答

3
我使用 ImageMagick 处理了这张图片,这是原图。这个解决方案需要知道输入图片的大小。

输入

Input

这张图片横向有 145 个像素,纵向有 200 个像素。

裁剪

从图片的顶部进行裁剪:

convert -crop 145x145+0+0 -resize 80x80 matrix.jpg thumbnail.jpeg

我使用 145x145 来从原始图像中提取一个正方形。 +0+0 是提取的正方形的偏移量,即左上角。

Crop

以图像中心剪裁:

convert -crop 145x145+0+27 -resize 80x80 matrix.jpg thumbnail.jpeg

裁剪

垂直偏移设置为27,因为我们需要在顶部或底部删除55200-145)像素,所以我们需要在顶部删除27个像素(55÷2),并在底部删除28个像素。

裁剪图片的底部:

convert -crop 145x145+0+55 -resize 80x80 matrix.jpg thumbnail.jpeg

无需裁剪即可调整大小

convert -resize 80x80\! matrix.jpg thumbnail.jpeg

!标记(如文档中建议的使用\!进行转义)在resize参数后强制ImageMagick忽略宽高比。

忽略宽高比


使用 convert -resize 80x80! 压缩图像时会出现压缩过度的问题,这是有原因的吗?有没有方法可以解决它呢?与原始图片相比,它明显被压扁了(在高度上),使其宽高比发生变化。 - bob_cobb
1
@bob_cobb:如果我使用GIMP将图像从145×200调整为80×80,我会得到相同的结果。你不能将矩形图像调整为正方形图像而不使其变形。 - A.L

3
如果要保持原始宽高比而不失真,您可以使用ImageMagick的-trim选项来去除白色填充:

convert "matrix.jpg" -resize "80x80" -gravity center -extent 80x80 -trim "thumbnail.jpg"

这将产生一个58x80的未裁剪图像,其纵横比与原始图像相同。此图像为58x80,因为ImageMagick使用原始图像的较大尺寸计算比例因子(在本例中为80/200),并按照相同的比例因子缩小较小尺寸以保持宽高比。
如果您想要一个精确的80x80像素未裁剪图像,则其宽高比与原始图像不同。输出图像将具有失真,并且@AL的无裁剪选项可以正常工作。

convert "matrix.jpg" -resize "80x80!" -gravity center -extent 80x80 "thumbnail.jpg"

在Windows 7中测试了ImageMagick 6.8.9。@AL语法可能适用于Linux。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接