グレスケ化スクリプトを作ってみる
庶務の引き継ぎツールにはPythonのグレスケ化スクリプト云々書いている割にそれが入っておらず、またなんかやってみるとやっぱりPhotoshopが綺麗だよ〜みたいなことを言われていたので実際どのくらいのクオリティで出来るのか試してみた。
今回参考にしたサイトは
つい最近書かれた記事だから以前には無かったと思われる情報も盛り込まれている。
実装
実装はほぼ上の記事から丸写し。
デコレータとかいうの初めて見たから最初戸惑ったけど、とりあえず庶務のグレスケ化ツールっぽく整理してみた。
from PIL import Image from PIL import ImageOps from itertools import product def processImage(func): def wrapper(input_image): w, h = input_image.size input_pix = input_image.load() output_image = Image.new("L", (w, h)) output_pix = output_image.load() for x, y in product(range(w), range(h)): output_pix[x, y] = func(input_pix[x, y]) return output_image return wrapper @processImage def grayscale(rgb): r, g, b = rgb return (r + g + b) / 3 @processImage def luminosity_grayscale(rgb): r, g, b = rgb return r*0.2126 + g*0.7152 + b*0.0722 if __name__ == "__main__": # input_image = Image.open(raw_input()) # output_image = luminosity_grayscale(input_image) # output_image.save(raw_input()) (s, e) = map(int, raw_input().split(' ')) for i in range(s, e+1): input_image = Image.open(str(i) + ".jpg") # 拡張子は適当 output_image = luminosity_grayscale(input_image) output_image.save("g" + str(i) + ".jpg") # 先頭のgで元ファイルと区別
grayscale関数とluminosity_grayscale関数の二つがあるけどこれはグレスケ化の際輝度を調節するかしないか。
なんかPILの関数にグレースケール関数がもともとあるらしいんだけどこっちの輝度調節した関数のほうが綺麗に出そうだったのでこっちを採用してみた。
O(WH)、つまりO(ピクセル数)だから100枚ぐらい1000*1000pxの画像処理したら遅くなりそうだけどまぁ…Photoshopで一枚ずつやるのに比べたら…ね。
仕様
とりあえずさっきのコードをgrayscale.pyで保存。
で、画像の名前をすべて番号一つに変更したら、たとえばそれが0.jpg〜100.jpgだとするとそこにこのスクリプト突っ込んで
$ python grayscale.py 0 100 $
で同じフォルダ内にグレスケ化された画像(g0.jpg〜g100.jpg)が出来上がる。
試してみた
とりあえずしっかりした大量の画像があるわけじゃないので一枚の画像をグレスケ化してみた。
まずbeforeがこちら
まぁ一時期僕のいろんなSNSにはってあった画像ですね。で、それをこのスクリプトでグレスケ化したのが以下
これなら普通にいいんじゃないかって思えた。
使おうかなぁ…