ゆうなんとかさんの雑記帳的な。

Twitterで踊ったり音ゲーしたりしてるあの名前がよくわからない人が書いてるらしいよ。

PILの使い方

思っていたよりも簡単なんですが、やりたいことにたどり着く前に困っています。

リモートにある画像ファイルを開いて、それをリサイズ&パディングして返したかったのですが、だいたいこんな感じになるんじゃないかなと思います。

def resize(self, source_url, size, padding=False):
    source = urllib.urlretrieve(source_url)
    image = Image.open(source[0])
    image.thumbnail(size)
    if padding:
        # transparent
        canvas = Image.new('RGBA', size, (0,0,0,0))
        diff = (size[0] - image.size[0], size[1] - image.size[1])
        box = (diff[0] / 2, diff[1] / 2, image.size[0] + diff[0] / 2, image.size[1] + diff[1] / 2)
        canvas.paste(image, box)
        return canvas
    else:
        return image


thumbnailでリサイズして、パディングするときはpasteで座標を指定して貼付けます。resizeでリサイズすると画像が歪んでしまうしがたがたになるので、thumbnailを使っています。
それはいいのですが、怪しいのがファイルをリモートからを取ってくるところで、本当はストリームから直接突っ込みたいのですがなかなかうまくいかなかったのでretrieveしています。うーん…