ImageMagick - 不同大小的平方图像

时间:2016-02-10 17:25:06

标签: bash image-processing imagemagick

我有所有不同尺寸和宽高比的图像,我试图将其转换为正方形,图像尺寸至少为400x400。

我正在运行的第一个脚本会将大于1000x1000的任何图像更改为该大小,添加白色背景,居中并添加20px填充。

mogrify -resize '1000x1000>' -background white -gravity center -bordercolor white -border 20 -format jpg -quality 80 -path converted -strip *

我遇到的问题是范围部分,因为我希望每个图像基于其最大尺寸为正方形,这使我相信它不可能在一行中完成,因为存在一些变量。

前:

355x307 --> 400x400
640x400 --> 640x640
1040x515 --> 1040x1040
494x713 --> 713x713

感谢任何帮助,谢谢

2 个答案:

答案 0 :(得分:0)

以下是获得预期尺寸的方法:

#!/bin/bash
while read from to ; do
    x=${from%x*}
    y=${from#*x}
    if (( x > y )) ; then
        tmp=$x
        x=$y
        y=$tmp
    fi                       # We are now sure x < y
    if (( y < 400 )) ; then
        to_x=400
        to_y=400
    else
        to_x=$y
        to_y=$y
    fi
    # Verify the result is correct:
    [[ $to == $to_x'x'$to_y ]] || echo $from $to $to_x'x'$to_y
done <<EOF
355x307  400x400
640x400  640x640
1040x515 1040x1040
494x713  713x713
EOF

您可以使用identify获取图片的实际尺寸。

答案 1 :(得分:0)

在我看来,你只想制作一个方形,其边是最长的方形:wh400。如果这是正确的,您可以在2 if语句中执行此操作:

if(w>h && w>400)
   w
else if (h>400)
   h
else
   400

ImageMagick可以像这样告诉你:

identify -format "%[fx:((w>h)&&(w>400))?w:((h>400)?h:400)]" image.jpg

所以,如果你想获得那个结果并制作那个维度的正方形,你可以这样做:

dim=$(identify -format "%[fx:((w>h)&&(w>400))?w:((h>400)?h:400)]" image.jpg)
convert image.jpg -resize ${dim}x${dim) -border 20 result.jpg

然后你会把它放在这样的循环中:

mkdir squared
for f in *.jpg; do
   dim=$(identify -format "%[fx:((w>h)&&(w>400))?w:((h>400)?h:400)]" "$f")
   convert "$f" -resize ${dim}x${dim) -border 20 squared/"$f"
done