2015/01/01(木) [n年前の日記]
#2 [prog][nitijyou][cg_tools] 年賀状を書くためにPythonスクリプトを書いたり
年賀状に貼る画像を作成すべく、素材画像を作成後、Python +
_Pillow (PIL)
で、ドット単位で加工をするスクリプトを書いてみたり。年賀状を書くためにPythonスクリプトを書く! みたいな。
環境は、Windows7 x64 + Python 2.7.8 + Pillow 2.6.1。
_conv_img.py

こういう処理が簡単に書けるから、Python + Pillow (PIL) は個人的に好きです。お手軽・気楽に使えると言うか。
しかし、考えてみたら、この程度ならGIMPでもできるよなあ…。例えば…。
GIMPで試してみたり。

うむ。Python スクリプトを書く必要は無かった…ですね…。
環境は、Windows7 x64 + Python 2.7.8 + Pillow 2.6.1。
_conv_img.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# -*- mode: python;Encoding: utf8n -*-
'''
1ドットずつ加工した画像を生成するPythonスクリプト
usage: conv_img.py INPUT_IMAGE OUTPUT_IMAGE
'''
import sys
from PIL import Image
SCALEX, SCALEY = 8, 8
def get_color(c, v):
''' 色を与えられた係数で明るくしたり暗くしたり '''
r, g, b = c
return (int(r * v), int(g * v), int(b * v))
def write_img(im, sx, sy, cc):
''' 1ドット分の色を数倍にして描き込む '''
nx = sx * SCALEX
ny = sy * SCALEY
r, g, b = cc
for y in range(SCALEY):
for x in range(SCALEX):
im.putpixel((nx + x, ny + y), (r, g, b))
for x in range(SCALEX):
x0 = nx + x
y0 = ny
im.putpixel((x0, y0), get_color(im.getpixel((x0, y0)), 1.3))
# y0 = ny + 1
# im.putpixel((x0, y0), get_color(im.getpixel((x0, y0)), 1.2))
# y0 = ny + SCALEY - 2
# im.putpixel((x0, y0), get_color(im.getpixel((x0, y0)), 0.7))
y0 = ny + SCALEY - 1
im.putpixel((x0, y0), get_color(im.getpixel((x0, y0)), 0.7))
for y in range(SCALEY):
x0 = nx
y0 = ny + y
im.putpixel((x0, y0), get_color(im.getpixel((x0, y0)), 1.2))
# x0 = nx + 1
# im.putpixel((x0, y0), get_color(im.getpixel((x0, y0)), 1.1))
# x0 = nx + SCALEX - 2
# im.putpixel((x0, y0), get_color(im.getpixel((x0, y0)), 0.8))
x0 = nx + SCALEX - 1
im.putpixel((x0, y0), get_color(im.getpixel((x0, y0)), 0.8))
def conv_img(infile, outfile):
im = Image.open(infile, 'r')
srcim = im.convert("RGB")
w, h = im.size
nim = Image.new("RGB", (w * SCALEX, h * SCALEY))
for y in range(h):
for x in range(w):
write_img(nim, x, y, srcim.getpixel((x, y)))
nim.save(outfile, 'PNG')
nim.show()
def main():
argvs = sys.argv
if len(argvs) != 3:
print "usage: python conv_img.py INPUT_IMAGE OUTPUT_IMAGE"
sys.exit()
infile = argvs[1]
outfile = argvs[2]
conv_img(infile, outfile)
if __name__ == '__main__':
main()
python conv_img.py hoge.png hoge_out.pngと打てば、以下のような感じの変換が。

こういう処理が簡単に書けるから、Python + Pillow (PIL) は個人的に好きです。お手軽・気楽に使えると言うか。
しかし、考えてみたら、この程度ならGIMPでもできるよなあ…。例えば…。
- 元画像をn倍に、補間なしで拡大
- n x n ドットでグレースケールの画像を作る
- フィルタ → マップ → 並べる、で敷き詰める
- レイヤーで重ねてレイヤーモードを変更
GIMPで試してみたり。

うむ。Python スクリプトを書く必要は無かった…ですね…。
[ ツッコむ ]
以上です。