Python プログラム

Pythonを使用してすべての画像サイズを小さくする方法

最近はいらない物をメルカリやヤフオクにて売る機会が増えてきました。

売る際に重要となってくるのは何と言っても画像!!

高い値段で売りたいのであれば、画像の綺麗さは重要になってくるため、私は一眼で撮ることにしております。

一眼で画像を撮る場合は綺麗に撮れるのですが、画像のサイズが大き過ぎるため、アップロードする際に画像の容量制限に引っかかります。
そのため、いちいち画像を小さくして容量を減らしてからアップロードしております。

ちょっとめんどくさいのでPythonを使ってこの画像のサイズを一括で縮小をしていきたいと思います。

画像のサイズを一括で小さくする

今回の目的はフォルダ内にある画像を一括でサイズを縮小して、別フォルダに保存するプログラムを作成しました。

【手順】

  1. データ元フォルダと保存先フォルダの作成
  2. 元フォルダ内にある画像のデータを読み込み
  3. 画像を縮小
  4. 縮小した画像を別フォルダに保存

画像の容量が437KBの写真が

Pythonのプログラムを使って画像を縮小することで、143KBまで減らすことができました。

事前準備

まず初めにデータ元フォルダと保存先フォルダの作成を行っていきます。

  1. デスクトップに「新しいフォルダー」のフォルダ作成(データ元フォルダ)
  2. 「新しいフォルダー」内に縮小したい画像を保存
  3. デスクトップに「Resize」のフォルダ作成(保存先フォルダ)

上記ではわかりやすいようにデスクトップにしてますが、デスクトップでなくても大丈夫です。

PIL(Python Imaging Library)のインストール

PIL(Python Imaging Library)とは、Pythonで画像を処理するためのライブラリです。
基本画像関係の処理をするときは使うことになるライブラリなので、インストールしていきます。

pip install Pillow

インストールが完了したら、Pythonを使って画像の処理をすることができます。

Pythonで画像を一括縮小

事前準備が終わったら、早速Pythonで画像を一括で縮小していきましょう。

【手順】

  1. 元フォルダ内にある画像のデータを読み込み
  2. 画像を縮小
  3. 縮小した画像を別フォルダに保存

下記では、dir_nameとnew_dir_nameが私のPathとなっておりますので、ご自身のPathに変更してください。

import os
from PIL import Image


#データ元フォルダ(事前に作成)
dir_name = r"C:\Users\user\Desktop\新しいフォルダー"

#保存先フォルダ(事前に作成)
new_dir_name = r'C:\Users\user\Desktop\Resize'

#元フォルダ内の全ファイル名の読み込み
files = os.listdir(dir_name)

#ループで全ファイルを縮小して別フォルダに保存
for file_name in files:
    
    #画像の元データを開く
    img = Image.open(os.path.join(dir_name, file_name))
    #画像を2分の1に縮小
    img_resize = img.resize((int(img.width / 2), int(img.height / 2)))
    #縮小した画像を別フォルダに保存
    img_resize.save(os.path.join(new_dir_name, file_name))

上記はすべて2分の1に画像を縮小するプログラムとなります。

Pythonで画像をもっと縮小したい場合

先程のプログラムは画像を2分の1にしていましたが、もっと画像を縮小したい場合もあると思います。例えば、画像のサイズを20%に縮小したいなど。

その場合は、下記の部分を変更することで、任意のサイズに縮小ができます。

img_resize = img.resize((int(img.width / 2), int(img.height / 2)))

img_resize = img.resize((round(float(img.width * 0.2)), round(float(img.height * 0.2))))

20%に縮小したい場合、floatを使用して20%(0.2)で乗算していきます。
ただ、画像サイズで小数点は使用できないため、roundで小数点をまるめていきます。

この方法を使用すれば、80%・40%の画像サイズに縮小することができます。

まとめ

写真は撮るのはいいのですが、写真の縮小を今までペイントから行っていました。

1枚ぐらいであればプログラムを作成するよりもペイントで行うほうが早いので良かったのですが、数十枚とかになるとさすがにペイントですべて画像のサイズを変更するのはめんどくさくなる。

結局Pythonを使って一括で縮小するプログラムを作成しました。

割とサイト用のアップロードする時の画像も一括で小さくしたいときにも重宝していて、いちいちソフトをかませないで任意の画像サイズに変更できるので個人的には作成しておいて良かったと感じました。

参考サイト:Pythonで小数・整数を四捨五入するroundとDecimal.quantize

-Python, プログラム