pythonで画像のリサイズ

PILを使うと簡単にかける

Image.open(f).resize((480,360)).save(outfile)

と書くだけで読み込んでリサイズして別名で保存できる。そんな感じで、とりあえずflickrのかわりに、リサイズして保存したらmarkdown書式でURLを出力するようなスクリプトを書いた。

import sys,datetime
import Image

if len(sys.argv) < 2:
  print sys.argv[0], " image_file"

for f in sys.argv[1:]:
  now = datetime.datetime.now().strftime('%s')
  outfile =  "/var/www/html/images/blog/" + now + ".jpg"
  Image.open(f).resize((480,360)).save(outfile)
  print r"![%s](http://www.kzfmix.com/images/blog/%s)" % (now,now + ".jpg")

1203853093

あとはドラッグドロップで転送するようにする

PILの画像の圧縮

昨日のPILのリサイズ後のザラザラ感が気になったので、フィルタを比較してみた。きろくを圧縮

左上から右下に向かってnearest,bilinear,bicubic,antialias

nearest bilinear bicubic antialias

antialiasが無難か。

夕焼けグリッチ

5x5のタイル状にしてみた。

1256111943

好みの夕暮れの色があるように、好みのノイズ量があるに違いないので、もう少しノイズの入れ方を考えないと。

import base64,re,Image
from random import randint

def glitch(infile,outfile):
    jpg_text = base64.encodestring(open(infile,"rb").read())
    glitched_text = ""
    count = 0
    width,height = Image.open(infile).size
    num = width * height / 10000
    for c in jpg_text:
        if c == '0':
            if randint(0,num) == 0:
                count += 1
                glitched_text += str(randint(0,9))
            else:
                glitched_text += c
        else:
            glitched_text += c
    glitched_jpg = base64.decodestring(glitched_text)
    open(outfile,"wb").write(glitched_jpg)
    return count
if __name__ == '__main__':
    for i in range(25):
        outfile = "test_%d.jpg" % i
        count = glitch("/Users/kzfm/yuki3.jpg",outfile)
        #print "%d: %d" % (i,count)

    tiled_im = Image.new('RGB',(1600,1200))
    tiled_px = tiled_im.load()
    for i in range(5):
        for j in range(5):
            n = 5*i+j;
            imgfile = "/Users/kzfm/python/test_%d.jpg" % n
            im = Image.open(imgfile)
            px = im.load()
            for x in range(320):
                for y in range(240):
                    nx = 320 * j + x
                    ny = 240 * i + y
                    tiled_px[nx,ny] = px[x,y]
    tiled_im.show()

昼下がりグリッチ

今日もグリッチ

import Image,sys
from random import randint

file = sys.argv[1]
im = Image.open(file)

width,height = im.size
interval = 0

for h in range(height):
    if(interval == 0):
        interval = randint(0,height-1)
        rand_slide_x = randint(0,14)
        rand_slide_y = randint(0,4)
        slide_x = 0
        slide_y = 0
    else:
        interval -= 1

    slide_x += rand_slide_x
    slide_y += rand_slide_y

    for w in range(width):
        current = (w,h)
        new_h = h + slide_y
        new_w = w + slide_x
        if new_h >= height: new_h = h
        if new_w >= width: new_w = w
        src = (new_w,new_h)
        im.putpixel(current,im.getpixel(src))

im.show()
im.save("glitch091021.jpg")

1256101630

PILでglitch

早朝グリッチ。PILのputpixelは遅いので、1.1.6からはim.loadを使えとのこと。

import Image,sys
from random import randint

file = sys.argv[1]
im = Image.open(file)

width,height = im.size
slide_x = 0
slide_y = 0
rand_slide_x = randint(0,14)
rand_slide_y = randint(0,4)

pix = im.load()
for h in range(height):
    slide_x += rand_slide_x
    slide_y += rand_slide_y

    for w in range(width):
        new_h = h + slide_y
        new_w = w + slide_x
        if new_h >= height: new_h = h
        if new_w >= width: new_w = w
        pix[w,h] = pix[new_w,new_h]

im.show()
im.save("glitch091020.jpg")

1255993806

そしてGlitch: Perfet Imperfectionsもポチッた

ProductName Glitch: Designing Imperfection

Mark Batty Publisher / 2839円 ( 2009-09-16 )


参考