見出し画像

Pythonでローカルフォルダの複数画像を一括でサイズ500kb以下にする

「にゃんぽう」という商品のHPに掲載してという依頼

うちも猫を2匹飼っている
兄が新規事業として猫用の漢方を販売したいと連絡があり
その商品の情報をホームページに突貫で掲出してほしいと頼まれた
wordpressで作っているページに"にゃんぽうのご案内"ページを作る
パンフレットから画像を切り出した
15枚ありサイズが重いので一括でリサイズできないかと考えた。
なんとなく、ついでにPNGからJPGにしたいと思う。

VS codeでPythonでチャレンジ

desktopにresizeという名前でフォルダを作成
resizeフォルダ内にnyanpouフォルダを作成し
その中に15枚のPNGファイルを入れました。

一つ一つやるのはめんどくさい

 VS Codeのターミナルでresizeフォルダを開きます。
ターミナルでpillowをインストールします。
Python Imaging LibraryのフォークであるPillow

!pip install pillow

pythonファイルを作ります。
今回はscript.py

touch script.py

script.pyの書き方

from PIL import Image
import os

# 入力と出力のフォルダパス
input_folder = 'nyanpou'
output_folder = 'output'

# 出力フォルダが存在しない場合は作成
if not os.path.exists(output_folder):
    os.makedirs(output_folder)

# 最大ファイルサイズ (500KB)
max_size = 500 * 1024

# 入力フォルダ内のPNGファイルを処理
for filename in os.listdir(input_folder):
    if filename.endswith('.png'):
        with Image.open(os.path.join(input_folder, filename)) as img:
            img = img.convert("RGB")  # RGB形式に変換
            out_path = os.path.join(output_folder, filename.replace('.png', '.jpg'))
            img.save(out_path, 'JPEG', quality=85)  # 初期保存
            
            # ファイルサイズが大きすぎる場合は、画質を落として再保存
            while os.path.getsize(out_path) > max_size:
                img = Image.open(out_path)
                img = img.resize([int(s * 0.9) for s in img.size], Image.ANTIALIAS)  # サイズを90%に縮小
                img.save(out_path, 'JPEG', quality=75)  # 画質をさらに落として保存

ターミナルで以下を実行

python3 script.py

一瞬でできました。
おそるべしpython

一瞬で変換完了

PythonのPillowとは

Pillowは、画像処理を行うためのオープンソースライブラリです。

Pillowの特徴

Pillowは、画像処理を行うためのオープンソースライブラリです。

  1. フォーマットサポート:

    • JPEG, PNG, BMP, GIF, TIFFなど多くの画像フォーマットをサポート

  2. 画像操作機能:

    • 画像のリサイズ、回転、ミラーリング、トリミングなどの基本的な画像操作から、色空間の変換、フィルタリング、画像合成など複雑な操作も可能

  3. 画像の描画機能:

    • 線、楕円、四角、テキストなどを画像上に描画できる

  4. 拡張性:

    • C言語の拡張を使用しており、パフォーマンスが要求される処理を高速に実行

  5. 使いやすいAPI:

    • PythonicなAPI設計により、初心者からプロフェッショナルまで幅広いユーザーに利用されています。

Pillowの利用例

画像処理の例として、次のようなコードスニペットが挙げられます。

from PIL import Image

# 画像を開く
img = Image.open('example.jpg')

# 画像をグレースケールに変換
img_gray = img.convert('L')

# 画像をリサイズ
img_resized = img.resize((300, 300))

# 画像を保存
img_resized.save('resized_example.jpg')


以上です。

ここの会社の代表をしています。


この記事が気に入ったらサポートをしてみませんか?