39

整理された一連のフォルダーに複数の画像が保存されています。これらの画像のサイズを、親ディレクトリから再帰的に特定の割合に変更する必要があります。私はUbuntu 11.10を実行していますが、端末から直接それを行う方法を学ぶことを好みます。

4

6 に答える 6

84

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%
于 2012-05-29T16:01:15.720 に答える
1

新しいサイズ変更解像度を指定した場合にも機能します:

convert $f.jpg -size 1024x768 $f.resized.png
于 2013-05-30T13:42:23.203 に答える
1

一括サイズ変更には 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 に変更します。

于 2014-05-28T13:00:56.193 に答える
0

次のようないくつかの答えがあります。

find . -name "*.jpg" | xargs convert -resize 50%

これは、次のようにリストを展開する convert -resize 50% a.jpg b.jpg c.jpgため機能しa.jpgませ ん。c-0.jpgb.jpgc-1.jpgc.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 1sh -c 'convert -resize 50% $0 $(echo $0 | sed 's/\.jpg/-th\.jpg/')'$0sed.jpg-th.jpgconvert

xargsbutなしのバージョンは次のfind -execとおりです。

find -name '*.jpg' -exec sh -c 'convert -resize 50% $0 $(echo $0 | sed 's/\.jpg/-th\.jpg/')' {} \;
于 2015-11-12T00:10:57.990 に答える