【ゆるプロ!番外編】リサイズして容量を圧縮するプログラム
ゆるいプログラミング講座、略して「ゆるプロ!」
これは気軽に気楽に試せるゆるーいプログラミング学習コンテンツである。今回のお題は「リサイズして容量を圧縮するプログラム」
一言)
StableDiffusionで画像生成していると画像の容量が増えてくるので、使うか分からない画像をそのまま取っておくのはハードディスクを圧迫するのでよろしくはないだろう
前提)
Python
注意点
本プログラムはcomfyUIで読み込むデータを削除してしまうので画像からワークフローを復元できない。他にも画像を扱うImageMagickも試したがプロンプトのデータは削除されてなさそうだが、comfyUIでは画像からロードできなかった。大事なデータはプロンプト用のデータとして別途、残しておこう
例)リサイズして容量を圧縮するプログラム
カレントディレクトリにあるpngファイルを50%にリサイズする
import os
import glob
from PIL import Image
dst_dir = './output'
os.makedirs(dst_dir, exist_ok=True)
convert_files = glob.glob('./*.png')
convert_summary_num = len(convert_files)
print("リサイズするファイルの数は:"+str(convert_summary_num)+"枚です。")
print("リサイズを開始します。")
print("-------------------------------")
i = 1
for f in convert_files:
img = Image.open(f)
img_resize = img.resize((img.width // 2, img.height // 2))
root, ext = os.path.splitext(f)
basename = os.path.basename(root)
img_resize.save(os.path.join(dst_dir, basename + '_half' + ext))
print("現在: "+str(i)+"/" + str(convert_summary_num) +"番目の画像を処理しました。")
i = i+1
i = i -1 #スマートじゃない
print("合計: "+str(i)+"枚のファイルを処理しました")
print("-------------------------------")
print("リサイズを終了します。")
"""
# 使用時は注意すること
# 大量の元データはそのまま削除される
import os
import glob
from PIL import Image
delete_files = glob.glob('./*.png')
delete_summary_file = len(delete_files)
i = 1
print("リサイズするファイルの数は:"+str(delete_summary_file)+"枚です。")
print("削除を開始します。")
print("-------------------------------")
for p in delete_files:
if os.path.isfile(p):
os.remove(p)
print("現在: "+str(i)+"/" + str(delete_summary_file) +"番目の画像を処理しました。")
i = i+1
i = i -1 #スマートじゃない
print("合計: "+str(i)+"枚のファイルを処理しました")
print("-------------------------------")
print("削除を終了します。")
"""
結果)
実行結果は下記の通り
Pythonで実行するが、削除するプログラムはコメントアウトして使用するが、最初はテストフォルダを作って画像を入れて試すことをお勧めする。元画像の削除プログラムも使うときには注意すること、消してはいけないファイルを消してしまったら目も当てられない
課題
画像は圧縮しても、ComfyUIに読み込めるプログラムを作るにはどうしたらいいか
参考
ほぼ、そのままコードを流用させてもらった
おわり!