使用ImageMagick向图像添加填充以使其成为方形

使用ImageMagick向图像添加填充以使其成为方形,imagemagick,imagemagick-convert,Imagemagick,Imagemagick Convert,我收到了一个文件夹,里面放满了白色背景的产品图片,并要求它们都是方形的,并且在产品周围有一致的填充量 我希望避免调整图像本身的大小,因此我的计划是修剪图像,添加填充,使图像成为方形,然后将边框作为结果图像的百分比添加到图像中 我唯一没有弄清楚的部分是如何填充。我看到的所有平方图像示例都在过程中调整了图像的大小。没有办法找到最长的尺寸并根据它调整大小吗 例如: 我有以下图像: 我需要它看起来像这样: 我还没有ImageMagick的代码(除了简单的trim和border命令)。这个想法是删去空

我收到了一个文件夹,里面放满了白色背景的产品图片,并要求它们都是方形的,并且在产品周围有一致的填充量

我希望避免调整图像本身的大小,因此我的计划是修剪图像,添加填充,使图像成为方形,然后将边框作为结果图像的百分比添加到图像中

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

例如: 我有以下图像:

我需要它看起来像这样:


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

我认为它是这样的:

#!/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
要查看第一个命令的作用,它只获取修剪框,而不实际修剪。尝试在其后面添加此行:

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

我认为是这样的:

#!/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
要查看第一个命令的作用,它只获取修剪框,而不实际修剪。尝试在其后面添加此行:

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

使用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

这个例子向你展示了如何计算和合并一个文件。我不知道我从哪个来源获得了上面的2行脚本(这是我编写的脚本的一部分),我想是Anthony Thyssen在他的优秀网站“ImageMagick用法示例”上写的

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

这个例子向你展示了如何计算和合并一个文件。我不知道我从哪一个来源得到了上面的2行脚本(这是我写的脚本的一部分),我想是从Anthony Thyssen的优秀网站“ImageMagick用法示例”上得到的.

请给出一个具体的图像示例,以及如何对其进行平方和填充,以及您目前使用的代码。我已经添加了一个示例图像和所需的输出。因此,您的修剪图像是629x157-正确吗?你怎么知道它应该变成758x758?我用的是计算器。在ImageMagick中,我将添加一个20%的边框。请给出一个图像的具体示例,以及如何对其进行平方和填充-以及您迄今为止使用的代码。我添加了一个示例图像和我所需的输出。因此,您的修剪图像是629x157-正确吗?你怎么知道它应该变成758x758?我用的是计算器。在ImageMagick中,我将添加20%的边框。谢谢,这看起来很有效。我会尝试调整一下,这样我可以在一个图像目录上运行它。在定义扩展数据块大小时,我尝试了fx:max(w,h),但这不起作用。我不知道为什么。使用此方法将在for循环内部中断。我发现获取宽度的另一种方法是:w=
identifite-format'$w'$I
谢谢,这看起来很有效。我会尝试调整一下,这样我可以在一个图像目录上运行它。在定义扩展数据块大小时,我尝试了fx:max(w,h),但这不起作用。我不知道为什么。使用此方法将在for循环内部中断。我发现获取宽度的另一种方法是:w=
identifite-format'$w'$I