大きな画像を小さな画像に変換することで、PILを使用して画像のサイズを変更しています。品質をあまり落とさずに画像のファイル サイズを縮小する標準的な方法はありますか。画像の元のサイズが 100 KB だとしましょう。
6 に答える
JPEG および PNG を保存するための組み込みパラメータはoptimize
.
>>> from PIL import Image
# My image is a 200x374 jpeg that is 102kb large
>>> foo = Image.open("path\\to\\image.jpg")
>>> foo.size
(200,374)
# I downsize the image with an ANTIALIAS filter (gives the highest quality)
>>> foo = foo.resize((160,300),Image.ANTIALIAS)
>>> foo.save("path\\to\\save\\image_scaled.jpg",quality=95)
# The saved downsized image size is 24.8kb
>>> foo.save("path\\to\\save\\image_scaled_opt.jpg",optimize=True,quality=95)
# The saved downsized image size is 22.9kb
フラグは、イメージのoptimize
サイズを可能な限り縮小する方法を見つけるために、イメージに対して追加のパスを実行します。1.9kb はそれほど多くないように思えるかもしれませんが、数百/数千枚の写真を追加すると、合計することができます。
5kb から 10kb に減らすために、保存オプションで品質値を変更できます。この場合、95 の代わりに 85 の品質を使用すると、次のようになります: 最適化されていない: 15.1kb 最適化された: 14.3kb
品質はあまり影響を受けず、ファイルサイズもはるかに小さいため、optimize を使用した品質 85 を好みます。
PILの画像モジュールのサムネイル機能をご覧ください。これを使用して、ファイルの小さいバージョンをさまざまなファイルタイプとして保存できます。できるだけ多くの品質を維持したい場合は、ANTIALIAS
フィルターの使用を検討してください。
それ以外に、希望する最大サイズを指定する方法があるかどうかはわかりません。もちろん、特定のサイズに達するまでさまざまな品質でファイルの複数のバージョンを保存し、残りを破棄して必要な画像を提供する関数を作成することもできます。