Pillowを使って画像を縮小させるスクリプトをメモしておこう!
はてなブログやホームページに画像をアップすると思ったより大きいと感じることがしばしばあったので、画像を縮小させるスクリプトを書いてみたのでメモしておく。
第一引数に対象ファイルを指定、第二引数に幅、高さを何分のいちにするかを指定。
対象のファイルはひとつだけ指定できる。
# # shrink_image.py file div # import sys import os from PIL import Image av = sys.argv if len(av) < 3: r = '2' else: r = av[2] fn = sys.argv[1] base,ext = os.path.splitext(os.path.basename(fn)) new_fn = base + "_" + r + ext print(new_fn) img = Image.open(fn) t = img.size w,h = t n = int(r) tpl = (w//n,h//n) print("{} => {}".format(t,tpl)) new_img = img.resize(tpl) new_img.save(new_fn)
pythonのスクリプトにpowershellのスクリプトをかぶせておこう。
対象のファイル・パスはパイプラインから受け取れるように、『PowerShell実践ガイドブック』のガイドに従い[CmdletBinding()]属性を付加してAdvanced Functionの形にした。これで対象のファイル・パスをパイプラインに流し込めばよい。
# # shrink image # Function Shrink-Image { [CmdletBinding()] param( [Parameter(Mandatory=$True, ValueFromPipeline=$True)] [ValidateNotNullOrEmpty()] [String]$Path, [int]$Div = 2 ) begin { } process { $cmd = "python '${home}\Documents\Python Scripts\shrink_image.py' " $cmd += "'" $cmd += $Path $cmd += "' " $cmd += $Div invoke-expression $cmd } end { } }
実行例(パイプラインから渡す)
(base) PS >ls *.jpg | shrink-image -div 10 img0001_10.jpg (800, 500) => (80, 50) img0002_10.jpg (800, 500) => (80, 50) (base) PS >
ただ、メモしたこと自体を忘れてしまうかもしれない。
了