如何将多张图像调整为相同大小

如何将多张图像调整为相同大小

我的目录中有几个图像文件。这些图像大小相似且背景颜色相同。

如何通过添加像所附图像这样的背景来使所有图像大小相同?

在此输入图像描述

答案1

这应该适用于 ImageMagick 可以处理的所有图像类型,而无需指定*.png*.jpg*.jpeg

#!/bin/bash

images=$(identify -format '%f\n' * 2>/dev/null)

IFS=$'\n'
set -e

max_dims=$(
  identify -format '%w %h\n' $images 2>/dev/null |
  awk '($1>w){w=$1} ($2>h){h=$2} END{print w"x"h}'
  )

orig_dir=originals_$(date +%Y-%m-%d_%T)
mkdir "$orig_dir"
mv -- $images "$orig_dir"
cd "$orig_dir"

set +e

for image in $images; do
  convert -- "$image" -gravity Center -extent "$max_dims" "../$image"
done

这会将原始图像移动到一个过时的目录中,以防结果不理想。此外,如果出于某种原因图像文件的名称中包含换行符,则此操作将会失败。

该脚本可以处理更多错误消息,以便在出现问题时提供有用的指示。但目前,如果移动图像时出现任何错误(set -e和之间的所有内容set +e),脚本将退出。希望这将避免造成任何不可逆转的损害。

更新

现在awk剧本无耻地抄袭了@terdon的回答

答案2

只要您选择的目标尺寸大于最大图像,您就应该可以接受以下操作:

mogrify -gravity Center -extent 200x200 -background white -colorspace RGB *png

上面的命令会改变原来的文件,您可能需要在运行之前进行备份。它使用ImageMagick通过添加白色背景 ( ) 并将图像居中 ( )mogrify将当前目录中的所有 png 大小调整为 200x200 像素 ( ) 。需要避免类似的错误-extent 200x200-background black-gravity Center-colorspace RGB

mogrify.im6: Ignoring incorrect gAMA value when sRGB is also present `emacs-48x48.png' @ warning/png.c/MagickPNGWarningHandler/1754.

为了确保您不会丢失任何图像数据,请确保您使用的尺寸大于或与您拥有的最大图像一样大。要快速获得该结果,请尝试:

file *png | awk -F, '{print $2}' | sort -nu

这应该打印所有排序图像的大小,您可以轻松找到最大的图像。


为了安抚金发姑娘 (:P),您可以自动化整个过程:

dimensions=$(file *png | cut -d, -f 2 | sort -u | 
            awk '($1>w){w=$1}($3>h){h=$3}END{print w"x"h}') && 
mogrify -gravity Center -extent $dimensions -background white -colorspace RGB *png; 

答案3

我借此机会提高了我的 bash 技能并想出了这个:

#!/bin/bash

maxx=0
maxy=0

# find largest dimension
for file in *.jpg ; do
  dim=$(identify "$file" | awk '{ print $3 }')
  xdim=$(echo $dim | cut -f1 -dx)
  ydim=$(echo $dim | cut -f2 -dx)
  if [ $xdim -gt $maxx ] ; then
    maxx=$xdim
  fi
  if [ $ydim -gt $maxy ] ; then
    maxy=$ydim
  fi
done

mkdir bordered

# resize and store new images in new folder
for file in *.jpg ; do
  dim=$(identify "$file" | awk '{ print $3 }')
  xdim=$(echo $dim | cut -f1 -dx)
  ydim=$(echo $dim | cut -f2 -dx)

  xborder=$(( ($maxx - $xdim ) / 2 ))
  yborder=$(( ($maxy - $ydim ) / 2 ))

  convert "$file" -bordercolor black -border ${xborder}x${yborder} "bordered/$file"

done

这应该可以解决问题:它首先循环遍历所有文件(根据您的需要进行更改)以找到最大的宽度和高度,然后再次循环以添加所需的边框(更改部分-bordercolor black以满足您的需要)。新文件存储在“bordered”文件夹中。

相关内容