使用ImageMagick为图像添加填充以使其呈正方形

时间:2016-09-29 15:32:00

标签: imagemagick imagemagick-convert

我已经获得了一个文件夹,里面装满了白色背景上的产品图像,并要求它们都是方形的,所有产品周围都有一致的填充物。

我想避免调整图像大小本身,所以我的计划是修剪图像,添加填充使图像成方形,然后以图像的百分比为图像添加边框。

我唯一无法弄清楚的是如何进行填充。我看到的所有平方图像示例都会在此过程中调整图像大小。有没有办法找到最长的尺寸并根据它调整大小?

实施例: 我有以下图片: enter image description here

我需要它看起来像这样: enter image description here

我还没有ImageMagick的代码(除了简单的trim和border命令之外)。我们的想法是修剪空白,然后使图像成方形,将产品(在本例中为矩形黑框)留在图像的中心。最后,添加边框以为图像提供填充。

2 个答案:

答案 0 :(得分:1)

我认为是这样的:

#!/bin/bash
# Get trim box w, h, x, y
IFS=" x+" read w h x y < <(convert -fuzz 10% start.jpg -format "%@" info:)

# Get longest side
longest=$w
[ $h -gt $longest ] && longest=$h

# Increase by 20%
longest=$(echo "scale=0;$longest*1.2/1" | bc)
echo $longest

convert -fuzz 10% start.jpg -trim -background white -gravity center -extent ${longest}x${longest} result.jpg

如果你不熟悉“bashisms”,你可以运行

convert -fuzz 10% start.jpg -format "%@" info:

看看第一个命令在做什么 - 它只是得到修剪框而没有实际修剪。尝试在其后添加此行:

echo $w, $h, $x, $y

答案 1 :(得分:0)

使用Linux作为shell脚本:

for file in *\.png ;  # or jpg,....
    do  IMG_W=$(identify -ping -format '%w' $file); 
    IMG_H=$(identify -ping -format '%h' $file); 
##   echo "$file: w: $IMG_W x h $IMG_H"; 
##   do something like
##   DIN A5: 2331x3307 pixel 400 dpi
##   half the width of white border
#   XPLUS=$(echo " ( 2331 - $IMG_W ) / 2 " |bc) ; 
#   YPLUS=250                                     
##   250 pixel from top border
##   echo "position: Xplus $XPLUS Yplus $YPLUS";
##   according to the calculations combine with white picture (background)
#   composite -geometry +$XPLUS+$YPLUS $file white.png ../tmp7/$file;
done

示例(已完成注释)显示了如何计算和合并文件。我不知道从哪个来源获得了上面脚本的两行(这是我写的脚本的一部分),我想安东尼·蒂森在他的优秀网站&#34; ImageMagick的例子用法&#34;