【Python】画像の軽量化をPillowで自動化|JPEG変換・リサイズ・縮小に対応

こんにちは、Kosei(@kay_diacc2)です!

画像のJPEG変換・リサイズ(縮小・拡大)を自動で実行できるツールの紹介記事です。画像データを取り扱うメディア運用者が抱える「PNG画像の軽量化や画像サイズ調整にかかる手間」を改善することができます。本記事ではツールに用いるPythonスクリプトおよびツールの利用方法に至るまで詳しく解説しています。

目次

本ツールの概要・解決する課題

本ツールのコンセプトは「画像の軽量化(JPEG変換)および画像サイズ変更(縮小・拡大)を一括して実行できる」であり、上図利用対象者が抱える悩みの解決を目的としています。ツールはPythonスクリプトを用いて構築しています。

ツールの利用マニュアル

本記事で紹介するツールの利用マニュアルです。事前に実施していただくこととして「①フォルダの作成」があります。同じディレクトリにIMGフォルダとPythonスクリプトファイルを用意しましょう。③スクリプトを実行すると、IMGフォルダに格納した画像ファイルが全てJPEG変換・リサイズされて出力されます。

具体的な使い方イメージは下記の動画からも確認できます。(動画上ではJupyter Notebookを用いてスクリプトを実行していますが、Terminal等の実行環境でももちろん動作します)

Pythonスクリプトのコード紹介

Pythonスクリプトの全量を示します。準備したスクリプトファイルに下記内容をコピー&ペーストしましょう。

import glob
import os
from PIL import Image

#画像のサイズ設定
height = 1200   #縦
width  = 1200   #横

def image_conveter(height,width):
    #保存先作成
    save_dir = os.path.dirname(os.path.abspath("IMG"))+"/JPG"
    os.makedirs(save_dir, exist_ok=True)

    #写真データディレクトリ取得
    img_dir = glob.glob(os.path.abspath("IMG")+"/*")


    for item in range(len(img_dir)):
        #写真データ読込
        img = Image.open(img_dir[item])

        #RGBA(png)→RGB(jpg)変換
        img_jpg = img.convert('RGB') 

        #画像リサイズ
        img_jpg.thumbnail((height,width))

        #JPG写真保存
        img_jpg.save(save_dir+"/"+img_dir[item].split("/")[-1].replace("png","jpg"), "JPEG", quality=95)

        #元データ削除
        os.remove(img_dir[item])
    
if __name__ == "__main__":
    image_conveter(height,width)

Pythonプログラム個別解説

ツールを業務に適した形で利用するために、コードの意味と画像操作設定について解説します。

ライブラリのインストール

本記事で紹介している実行スクリプトでは、PythonライブラリであるPillowをもとに画像を操作しています。ターミナルを開いた後に下記を入力し、ライブラリを事前にインストールしておきましょう。

pip install pillow

画像サイズの最大値指定

Pythonスクリプトを実行すると、元の画像の縦横比は保ったまま縦横いずれかの最大が1200pxになるよう設定しています。このサイズ1200pxを変更したい場合は下記の数値を修正してもらえればと思います。

#画像のサイズ設定
height = 1200   #縦
width  = 1200   #横

画像ファイルの読み込み

IMGフォルダからの画像ファイル読み込みには、globとosライブラリを用いています。

#写真データディレクトリ取得
img_dir = glob.glob(os.path.abspath("IMG")+"/*")

JPEG変換・リサイズした画像ファイルの保存

変換処理が完了した画像は、IMGフォルダと同じディレクトリに自動生成されるJPGフォルダ内に格納されます。

#保存先作成
save_dir = os.path.dirname(os.path.abspath("IMG"))+"/JPG"
os.makedirs(save_dir, exist_ok=True)

JPEG変換

画像のJPEG変換はconvert()メソッドに”RGB”を引数に渡して実施します。

#RGBA(png)→RGB(jpg)変換
img_jpg = img.convert('RGB') 

画像のサイズ変更

画像の縦横比を維持したままサイズを変更する方法として、thumbnail()メソッドを用います。

#画像リサイズ
img_jpg.thumbnail((height,width))

変換前の画像データ

変換前の画像データは画像操作後に削除する設定としています。元画像データも残したい場合は下記のコードを削除すると良いです。

#元データの削除
os.remove(img_dir[item])

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
URLをコピーする
URLをコピーしました!
目次
閉じる