コマンドラインから PNG ファイルのサイズを変更するにはどうすればいいですか?

コマンドラインから PNG ファイルのサイズを変更するにはどうすればいいですか?

1.pngという名前の画像があるとします。

500px : height
1000px : width

サイズを次のように変更します:

50px : height
100px : width

JPG ではなく PNG 形式で出力する必要があります。例を示していただけると助かります。

答え1

私はconvertまたはmogrifyからイメージマジックスイート。

$ convert -resize 100x50 1.png 2.png

# or #

$ mogrify -resize 100x50 1.png

convert別の出力ファイル名を取り、別のファイルを作成します。
mogrify別の出力ファイル名を取りません。ファイルをその場で変更します。

答え2

これまでに得た答えは、ソース画像とターゲット画像のアスペクト比が同じであるため、この特定のケースでは有効です。ただし、任意のサイズに変更したい場合は、彼らは失敗するだろう:

$ file foo.png 
foo.png: PNG image data, 1000 x 500, 8-bit/color RGB, non-interlaced
$ convert -resize 100x50 foo.png bar.png
$ file bar.png 
bar.png: PNG image data, 100 x 50, 8-bit colormap, non-interlaced

上記のように、画像の比率を変更しない場合は、単純な変換は正常に機能します。しかし、比率を変更したい場合はどうすればよいでしょうか?

$ convert -resize 200x50 foo.png bar.png
$ file bar.png 
bar.png: PNG image data, 100 x 50, 8-bit colormap, non-interlaced

convertしたがって、比率を変更する場合、上記のコマンドは失敗します。この方法で画像を強制的に変更するには、!ジオメトリ仕様の末尾に を追加する必要があります ( は!多くのシェルで特殊文字であるため、 としてエスケープする必要があります\!)。

$ convert -resize 200x50\! foo.png bar.png
$ file bar.png 
bar.png: PNG image data, 200 x 50, 8-bit colormap, non-interlaced

答え3

これには Imagemagick を使用します。

正しい使い方についてはマニュアルページを読んでください。パラメータを渡すことで動作するはずです。

convert 1.png -resize 50x100 1-resized.png

答え4

ImageMagick の代替として、定評のある netpbm があります。

pngtopnm input.png | pnmscale -reduce 10 | pnmtopng > output.png

関連情報