Hatena::ブログ(Diary)

にのせき日記

2011-09-27

[]PILでHalftonみたいなの

こんな感じですか?わかりません><。

Before

f:id:ninoseki:20110927211211j:image

After

f:id:ninoseki:20110927211212j:image


# -*- coding: utf-8 -*-
from PIL import Image, ImageDraw

def collect(img, h, w, y, x, interval):
  y2 = (y + interval) if (y + interval) < h else h - 1
  x2 = (x + interval) if (x + interval) < w else w - 1
  r = 0
  g = 0
  b = 0
  c = 0
  
  for i in range(y, y2 + 1):
    for j in range(x , x2 + 1):
      p = img.getpixel((j, i))
      r += p[0]
      g += p[1]
      b += p[2]
      c += 1
  
  return (r / c , g / c , b / c) if c > 0 else (255, 255, 255)

def halftone(img):
  size = img.size
  w = size[0]
  h = size[1]
  interval = 4
  r = interval / 2
  
  output = Image.new('RGB', (w, h), 'white')
  draw = ImageDraw.Draw(output)
  
  for y in range(0, h + r, interval):
    for x in range(0, w + r, interval):
      p = collect(img, h, w, y, x, interval)
      draw.ellipse((x - r, y - r, x + r, y + r), fill = p)
  
  return output

if __name__ == '__main__':
  img = Image.open("src.jpg")

  output = halftone(img)
  output.save("dst.jpg")

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/ninoseki/20110927/1317125648