明度彩度陰影,縦判定,縮小,リネーム 全部一気にやってくれるツールを作りました。
正確に言うと明度彩度陰影,縦判定,縮小,リネーム を雑に全部一気にやってくれるツールです。ブログ書くのに写真を毎回用意しないといけません。一々縮小やリネームや縦横回転を手作業でやっていたら時間の無駄です。僕はそれをやりたくなくなりました。今日びAIだのRPAだの言っているのに手作業なんてアホです。
前回:
目的:
- 明度彩度コントラスト→達成済
- 縦判定→今回達成
- 縮小→達成済だが縦判定しサイズを変える機能追加
- リネーム→今回達成
ブログ投稿するために3600万画素の写真を上げるわけにはいかない。縮小③して、ついでに②の縦判定で縦の場合は最大900px、横の場合は1200pxさらについでに明度、彩度、コントラストをなんとなく調整(決め打ちなので非常に雑)① さらにIMGP0000.JPGリネームして(任意).jpg にして下位フォルダ作ってぶちこむ④
やってみた
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
from PIL import Image from PIL import ImageEnhance from pathlib import Path import os, tkinter.filedialog, tkinter.messagebox from PIL.ExifTags import TAGS path = 'conf.txt' if os.path.exists(path): f = open('conf.txt') data = f.read() lines = data.split('\n') f.close() if lines[0]: bri = lines[0] bri = float(bri[2:]) else: bri = 1.0 bri = 1.2 root = tkinter.Tk() root.withdraw() fTyp = [("","*")] iDir = os.path.abspath(os.path.dirname(__file__)) thisfile = tkinter.filedialog.askopenfilename(filetypes = fTyp,initialdir = iDir) path1 = Path(thisfile).parent os.chdir(path1) files = os.listdir() stname = ('') stnum = 1 npath = '/small' os.mkdir(str(path1) + npath) for file in files: fullpath = str(path1) +'\\'+ file name, ext = os.path.splitext(file) img =Image.open(fullpath) try: exif = img._getexif() except AttributeError: print('errrr') #EXIF取り出し、forで出してる exif_table = {} for tag_id, value in exif.items(): tag = TAGS.get(tag_id, tag_id) exif_table[tag] = value # print(exif_table) orientation = exif_table.get('Orientation', 1) # print(orientation) tateyoko = 1200 if orientation == 8: img = img.transpose(Image.ROTATE_90) tateyoko = 900 elif orientation == 6: img = img.transpose(Image.ROTATE_270) tateyoko = 900 stname = ('photo') #好きなファイル名にしてね img = img.point(lambda x: x * 1.1)#default1.1 -> 1.3 con = ImageEnhance.Contrast(img) nimg = con.enhance(1.11)#1.2 sat = ImageEnhance.Color(nimg) nimg = sat.enhance(0.95) #0.8暗い日設定 nimg.thumbnail((tateyoko, tateyoko), Image.LANCZOS) #img.thumbnail((1200, 1200), Image.LANCZOS) #nfullpath = str(path1) + '\\' + name + 'new.jpg' nfullpath = str(path1) + '\\' + 'small' +'\\' + stname +str(stnum)+ '.jpg' #nfullpath = str(path1) + '\\' + stname + str(stnum) + '.jpg' nimg.save(nfullpath, quality=80) stnum += 1 |
GUIで値を変更するものをつくpyinstallerでEXE化はめんどかったのでコンソール上で操作すればいいことにしました(ひどい) そのうちguiつくってみたいですね。
自分の環境は1.Pycharmとpythonをインストールし 2.アナコンダ(仮想空間)を入れて 3.Pillowをインストール
Pycharm上で値をいじったり出力するファイル名ををいじったりが可能。あとはワンクリックで処理してくれるから楽です。ソースコードは汚いですが無限個ある並行世界のどこかには技術者倫理の高いバージョンの僕がいるので彼に託しました。one of infinite version of me
いじりそうなところは
- 57行目→ファイル名
- 58,60,62行目→明度とか
- 50,53,56→ピクセル数
- 68→jpg品質
ワンクリックでsmallというサブディレクトリに横1200pxで縦横が狂っておらず彩度が上がってファイル名がきれいになった80%品質に圧縮されたjpgが吐かれると思います。
じょうじあさいこう。わいん750ml 250えん。bus20えん
参考
Python Tips:画像の Exif データを取得したい – Life with Python
https://www.lifewithpython.com/2014/12/python-extract-exif-data-like-data-from-images.html
Python3でJPEG画像のExifを取得し、回転方向を修正する
Python + Pillow(PIL)で画像の回転を行う(rotate, transpose) – Symfoware
これで僕のタブレットが突如盗まれても復元できるね。こんなんgithubに上げておけよって突っ込みたくなるけど、これで僕のタブレットが突然スられてgithubが倒産しても復元できるね。
それでは