ImageMagick:如何使用mogrify进行等比例缩放而不需要背景

21

我正在按照这个例子http://cubiq.org/create-fixed-size-thumbnails-with-imagemagick操作图片,效果很符合我的期望,但是有一个问题就是生成的缩略图带有白色背景边框,我想把这个背景边框去掉,只保留图像部分(即裁剪掉白色背景),请问有什么办法可以实现吗?如果不能,那是否还有其他方法可以达到同样的效果?另外,缩放比例需要保持一致,所以我不想只设置宽度或高度限制来进行调整,而是需要等比例缩放图片。

3个回答

34

你链接的示例使用了这个命令:

mogrify             \
  -resize 80x80     \
  -background white \
  -gravity center   \
  -extent 80x80     \
  -format jpg       \
  -quality 75       \
  -path thumbs      \
   *.jpg

首先,mogrify 有一定的风险。它会直接操作你的原始图片并覆盖原文件。如果出现问题,你将失去原始图片,并被困在错误的结果中。但是,在你的情况下,-path thumbs 可以减轻这种危险,因为它确保结果将写入到子目录 thumbs 中。

另一个 ImageMagick 命令 convert 可以保留您的原始图片,并执行与 mogrify 相同的操作:

convert             \
   input.jpg        \
  -resize 80x80     \
  -background white \
  -gravity center   \
  -extent 80x80     \
  -quality 75       \
   thumbs/output.jpg

如果想要相同的结果,但不需要白色画布扩展(最初是为了使结果成为一个正方形的80x80图像),只需省略-extent 80x80参数即可(-background whitegravity center也是多余的):

convert             \
   input.jpg        \
  -resize 80x80     \
  -quality 75       \
   thumbs/output.jpg
或者
mogrify             \
  -resize 80x80     \
  -format jpg       \
  -quality 75       \
  -path thumbs      \
   *.jpg

谢谢,Kurt。我会解决 mogrify 的问题。我其实不太确定它和 convert 之间的区别是什么,但我已经设置了 -path 以防万一。我肯定不想覆盖主图片文件。 - cj5
"-resize 80x-1" 将自动按比例计算高度。 - Gray Programmerz

7

这是我每次想要批量调整大小并保持长宽比为1920x的命令。

mogrify -path . -resize 1920x1920 -format "_resized.jpg" -quality 70 *.jpg


2
实际上,-resize 1920x1920 保持纵横比,导致 max (width,height) 等于 1920。 - Déjà vu

7

我知道这是一个老帖子,但是使用-set标志和-write标志,可以在不覆盖原始文件的情况下将内容写入到同一目录中的文件中:

mogrify -resize 80x80 \
-set filename:name "%t_small.%e" \
-write "%[filename:name]" \
*.jpg

http://imagemagick.org/script/escape.php所述,%t是没有扩展名的文件名,%e是扩展名。因此,image.jpg的输出将是缩略图image_small.jpg。

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