とりあえず ここ のサンプルをそのまま動かすpythonコード
if __name__ == '__main__': bmp = ''.join(map(chr,[ 0x42,0x4d, # 'BM' 0x48,0,0,0, # file size 0x48 0,0, # 0 0,0, # 0 0x20,0,0,0, # pixel data start at 0x20 0x0c,0,0,0, # size of struct, 0x0c 0x0a,0, # image height: 10 0x0a,0, # image width: 10 1,0, # 1 1,0, # 1 0x00,0x00,0x80, # color: dark red (#800000) 0x00,0x00,0x00, # color: black 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, # * pixel data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, # * 0,0,0,0,0,0,0,0 # * ])) f = open('test.bmp', 'wb') # 'wb' (write + binary) f.write(bmp) f.close()
出力: 

HSL空間から、RGB空間への座標変換など
def hsl2rgb(h, s, l): h %= 360 assert any(isinstance(x, float) for x in (h, s, l)) assert 0 <= h < 360 assert 0 <= s <= 1 assert 0 <= l <= 1 if l <= 0.5: sat_diff = s*l else: sat_diff = s*(1-l) max = l + sat_diff min = l - sat_diff hue_diff = 2*sat_diff*(h%60)/60 if h < 60: r = max g = min + hue_diff b = min elif 60 <= h < 120: r = max - hue_diff g = max b = min elif 120 <= h < 180: r = min g = max b = min + hue_diff elif 180 <= h < 240: r = min g = max - hue_diff b = max elif 240 <= h < 300: r = min + hue_diff g = min b = max elif 300 <= h : r = max g = min b = max - hue_diff return r, g, b def unit2byte(x): return chr(int(x*255))
画像の出力など
import math import random import imlib class Pixel(object): def __init__(self, rgb=None, hsl=None): if rgb: self.rgb = rgb elif hsl: self.rgb = imlib.hsl2rgb(*hsl) else: self.rgb = 0, 0, 0 def __str__(self): return ''.join(map(imlib.unit2byte, self.rgb)) class PPM(object): def __init__(self, xy): self.x, self.y = xy self.table = [[Pixel(hsl=[(1-abs(self.grad(i)*self.grad(j)*2-1))*36000/1.67, 1.0 , 0.5]) for i in range(self.x)] for j in range(self.y)] def grad(self, c, r=0): if not r: return float(c)/self.x else: return float(self.x - c)/self.x def grad_y(self, c): return c*255/self.y def to_ppm(self): data = 'P6\n#\n%s %s\n255\n' % (self.x, self.y) data += ''.join(''.join(str(pixel) for pixel in row) for row in self.table) return data def save_as(self, file): f = open(file, 'wb') f.write(self.to_ppm()) f.close() def test(): PPM((120,)*2).save_as('img.ppm') if __name__ == '__main__': test()
45x45:






48x48:

























.
.
.
.
.









































120x120:
















































添付ファイル
- a1.png
- a10.png
- a11.png
- a12.png
- a2.png
- a3.png
- a4.png
- a5.png
- a6.png
- a7.png
- a8.png
- a9.png
- b.png
- b2.png
- b3.png
- b4.png
- gray1.png
- gray2.png
- gray3.png
- gray4.png
- gray5.png
- img.png
- img10.png
- img11.png
- img12.png
- img13.png
- img14.png
- img15.png
- img16.png
- img17.png
- img19.png
- img2.png
- img20.png
- img21.png
- img22.png
- img23.png
- img24.png
- img3.png
- img4.png
- img5.png
- img6.png
- img7.png
- img8.png
- img9.png
- my.png
- t.png
- t10.png
- t11.png
- t12.png
- t13.png
- t14.png
- t2.png
- t3.png
- t4.png
- t5.png
- t6.png
- t7.png
- t8.png
- t9.png
- test.bmp
- white.png