pythonにはPillow(Python Imaging Library)という超便利な画像ライブラリがあります。 そちらをつかって画像の圧縮をします
仕様
動き
ソース
https://colab.research.google.com/drive/13a3OJe63lZdpzmAIcdPB8jcMLdPKHwCH
import IPython from io import StringIO import io import urllib.request from PIL import Image # urlから画像をダウンロードしてimgという変数に突っ込む imagesrc ="http://cdn-ak.f.st-hatena.com/images/fotolife/m/masalib/20160218/20160218144707.jpg" f = io.BytesIO(urllib.request.urlopen(imagesrc).read()) img = Image.open(f) # ダウンロードした画像の縦横のピクセルを取得する img.save('sorce.jpg') before_x, before_y = img.size[0], img.size[1] # 変換した画像サイズのピクセル数を計算する # 縦基軸の場合 height = 360 x = int(round(float(height / float(before_y) * float(before_x)))) y = height # 横基軸の場合 #width = 480 #x = width #y = int(round(float(width / float(before_x) * float(before_y)))) # 画像圧縮する img = img.resize((x,y), Image.LANCZOS) # 変換画像を保存する img.save('resized.jpg') # 比較 print ("もと画像の縦横",before_x, before_y) IPython.display.Image('sorce.jpg') print ("変換後画像の縦横",x, y) IPython.display.Image('resized.jpg')
結果
感想
- 変数にわたさないと変換されない??という罠にはまった
img = img.resize((x,y), Image.LANCZOS) img.save('resized.jpg')
- 縦横のサイズを計算するのがめんどくさい。パラメータであればいいけど、見当たらなかった
- resizeのフィルタがあるが実行速度や圧縮の関係がまだ理解していないので検証したい