我有所有不同尺寸和宽高比的图像,我试图将其转换为正方形,图像尺寸至少为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
感谢任何帮助,谢谢
答案 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)
在我看来,你只想制作一个方形,其边是最长的方形:w
,h
和400
。如果这是正确的,您可以在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