複数の画像のサイズを同じサイズに調整する方法

複数の画像のサイズを同じサイズに調整する方法

私のディレクトリにはいくつかの画像ファイルがあります。画像のサイズは似ており、背景色も同じです。

添付画像のように背景を追加してすべての画像を同じサイズにするにはどうすればよいですか?

ここに画像の説明を入力してください。

答え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サイズを200 x 200ピクセル()に調整します。同様の間違いを避けるべきです-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

これにより、整列されたすべての画像のサイズが印刷され、最大の画像を簡単に見つけることができます。


Goldilocks(: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)。新しいファイルは「ボーダー」フォルダに保存されます。

関連情報