こんにちは、Kosei(@kay_diacc2)です!
本ツールの概要・解決する課題

本ツールのコンセプトは「画像の軽量化(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])
最後に

お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら