批量图像自动裁剪,应用固定宽度,并保持纵横比

批量图像自动裁剪,应用固定宽度,并保持纵横比

我发现很难找到我正在做的事情的解决方案。

简单地说,这些图像的用途是为了在线商店。

IrfanView 批处理使用自动裁剪边框基本上可以完成裁剪。我需要剪掉正在处理的图像中的白色/黑色或任何统一的边框。

但我需要让图像保持正方形。比如 300x300 像素。

因此,例如,如果要裁剪的图像具有较长的焦点,它将裁剪空白/边距,直到到达顶部和底部。然后,它只会裁剪左侧和右侧,直到左侧和右侧的大小等于长度。要么只删除部分空白(边距),要么如果需要,添加一些空白(边距)。

答案1

imagemagick有很棒的选项-trim。我记得-size大约一年前在一堆 4500 张图片上使用它来删除空白的单色边框并只保留产品。我记得将所有图像放在目录中a并创建一个空目录b;然后从目录中a使用类似

for i in *; do convert-im6.q16 $i -trim -resize 300 ../b/$i; done

然后我等了大约一个小时,目录中就有了 4500 张图像,b单色背景经过修剪,宽度为 300 像素。convert-im6.q16在其他系统上,该命令的名称可能略有不同,例如convert或 之类的。

答案2

我使用 IrfanView 来实现一个可行的解决方案。

使用文件批量转换/重命名>>我只需将图像添加到输入文件对话框中。

  1. 在批量转换设置中使用高级选项,然后单击高级。

  2. 勾选“调整大小”并选择“设置新大小”,然后将一侧或两侧设置为。在高度/宽度中输入相同的大小(我使用 300px)。这将使图像的大小调整到该大小的最大值。因此它将采用最大尺寸(取决于图像是纵向还是横向) - 并将其设置为 300px。只要您保持纵横比,另一侧将按比例缩放。

  3. 您还需要执行智能裁剪,在 IrfanView 中,它被称为自动裁剪边框 - 您会在 RESIZE 对话框的右侧看到此设置。

在完成之前,您要确保它首先进行裁剪,然后调整大小,否则最终会得到小于 300px 的结果,因为如果它首先调整大小为 300px,然后再裁剪……您可以想象结果。

  1. 因此,在右下角勾选“自定义处理顺序”,然后单击“更改顺序”。将“自动裁剪边框”移至顶部。单击“确定”,再次单击“确定”,即可开始转换。单击“开始批处理”。

这并没有完全解决我的问题,但只要我能够将最大边设置为 300px,并在调整大小之前进行智能裁剪,那就没关系了。其余的我可以在 html 中使用 CSS 来完成,这实际上可能是一个更好的解决方案。

答案3

假设您的原始图像没有实际的黑色或白色边框,而您只是想避免创建这样的边框,则可以使用 Imagemagick 的convert

convert in.jpg -geometry 300x300^ -gravity center -crop 300x300+0+0 out.jpg

插入符号 ( ^) 确保图像填充宽度和高度。

-geometry但是,如果您没有方形源材料,仅使用该参数将导致图像的其中一条边过大。因此,您需要裁剪中心以获得最终的图像分辨率。+0+0确保您不会将剪切掉的部分作为单独的文件,因为您不需要它们。

如果源图像中确实有边框,您可能需要尝试-trim在之后使用in.jpg

答案4

我的要求略有不同,因为我想修剪透明像素,但它在功能上可能与删除边框相同?也许吧。

这些答案对我都不起作用。下达赏金后,我继续搜索,发现这extent就是缺失的部分。

magick convert *.png -trim -background none -resize 300x300 -gravity center -extent 300x300 out/processed.png

据我了解,以下是每个参数的作用的详细说明:

  • -trim:修剪所有透明像素(左,右,上,下)
  • -background none:保持调整大小的透明度(顺序很重要!)
  • -resize 300x300:使最大宽度和高度为300。 无法使其成为正方形
  • -gravity center:将图像居中(可能不是必需的,可能适用于调整大小和范围,没有进行太多测试)。
  • -extent 300x300:调整帆布,这使得它再次变成正方形。

这基本上可以分为三个步骤:

  1. 删除透明边缘
  2. 调整大小,使宽度/高度不超过 300 像素。
  3. 将宽度和高度都设为 300 像素。

相关内容