【Python】PNG画像のJPEG変換・リサイズ・縮小方法|重たい画像の軽量化作業をPillowで自動化

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ
  • PNG画像のJPEG変換・リサイズ(縮小・拡大)を自動で実行できるツールの作成方法を言及。
  • 画像の軽量化や画像サイズ調整に毎回手間がかかる」「画像のサイズ調整を自動化したい」このような悩みにお応え!
  • 本記事では、Pythonを用いたプログラム構築方法からツールの利用方法に至るまで詳しく解説。
目次

【Python】画像変換・軽量化の課題と本ツールで対応できること

Webサイト、YouTube、その他ソーシャルメディアの運営を行なっている方は、上図のような悩みを抱えたことがないでしょうか?

本記事で紹介するツールのコンセプトは「PNG画像の軽量化(JPEG変換)および画像サイズ変更(縮小・拡大)を一括して実行できる」であり、上図利用対象者が抱える悩みの解決を目指したものです。

ツールはPythonスクリプトを用いて構築していきます。

ツールの利用マニュアル

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

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

【Python】コード全量掲載|PNG画像のJPEG変換・サイズ調整

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】コード個別解説|JPEG変換・リサイズ処理

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

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

本記事で紹介している実行スクリプトでは、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])

【参考】Pythonを活用した様々なお役立ち情報

当サイトではPythonを活用した様々なお役立ち情報を配信しています。

Pythonでできること・仕事に応用

Pythonで実現できることを知りたい」「Pythonスキルを仕事で活かしたい」方はこちら!

Python✖️AI・機械学習

Python活用の最大メリットの1つであるAI・機械学習について詳しく知りたい方はこちら!

Python✖️投資自動化(仮想通貨)

Pythonはフィンテックとの相性が良く、その中でも仮想通貨自動売買タスクは近年注目度の高い領域です。フィンテック・投資に興味がある方はこちら!

最後に

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

本記事をシェア!
目次