整理された一連のフォルダーに複数の画像が保存されています。これらの画像のサイズを、親ディレクトリから再帰的に特定の割合に変更する必要があります。私はUbuntu 11.10を実行していますが、端末から直接それを行う方法を学ぶことを好みます。
6 に答える
imagemagickを使用できます。たとえば、現在のディレクトリの下にあるすべての JPG 画像のサイズを元のサイズの 50% に変更するには、次のようにします。
for f in `find . -name "*.jpg"`
do
convert $f -resize 50% $f.resized.jpg
done
結果のファイルには、名前に「.jpg」が 2 回含まれます。それが問題である場合は、次の代替手段を確認できます。
サイズを変更するファイルをトラバース/検索するには、xargsも使用できます。例:
find . -name "*.jpg" | xargs convert -resize 50%
これにより、イメージのコピーが作成されます。それらをその場で変換したいだけの場合は、次を使用できます。
find . -name "*.jpg" | xargs mogrify -resize 50%
新しいサイズ変更解像度を指定した場合にも機能します:
convert $f.jpg -size 1024x768 $f.resized.png
一括サイズ変更には imagemagick ツールを使用できます。
アスペクト比を維持します
$ convert dragon.gif -resize 64x64 resize_dragon.gif
縦横比が維持されない
$ convert dragon.gif -resize 64x64\! exact_dragon.gif
$ cat resize.sh
#!/bin/bash
for f in `find . -name "*.jpg"`
do
convert $f -resize 45x60\! $f.resize.jpg
done
現在のディレクトリの縦横比を維持せずに、画像のサイズを 45x60 に変更します。
次のようないくつかの答えがあります。
find . -name "*.jpg" | xargs convert -resize 50%
これは、次のようにリストを展開する
convert -resize 50% a.jpg b.jpg c.jpg
ため機能しa.jpg
ませ ん。c-0.jpg
b.jpg
c-1.jpg
c.jpg
したがって、マッチごとにサイズ変更コマンドを実行し、入力ファイル名と出力ファイル名の両方を次のように指定する必要があります。
find . -name "*.jpg" | xargs -n 1 sh -c 'convert -resize 50% $0 $(echo $0 | sed 's/\.jpg/-th\.jpg/')'
の各一致は、サイズ変更スクリプトにfind
個別に渡されます: 。このスクリプトは引数 でファイル名を受け取り、元のサフィックスを1に置き換えて出力ファイル名を作成するために使用します。そして、それらの 2 つのファイル名でコマンドを実行します。 xargs -n 1
sh -c 'convert -resize 50% $0 $(echo $0 | sed 's/\.jpg/-th\.jpg/')'
$0
sed
.jpg
-th.jpg
convert
xargs
butなしのバージョンは次のfind -exec
とおりです。
find -name '*.jpg' -exec sh -c 'convert -resize 50% $0 $(echo $0 | sed 's/\.jpg/-th\.jpg/')' {} \;