代码如下:
#!/usr/bin/env python
# -*-coding:UTF-8-*-#
from common import *
import Image, ImageFilter, math, sys, os, random
def modifyImageObj(img, matrix) :
width, height = img.size
for h in range(0, height) :
for w in range(0, width) :
pixel = matrix[h][w]
img.putpixel((w, h), pixel)
return img
def initMatrix(h, w, v = (0, 0, 0)) :
result = []
for _h in range(0, h) :
row = []
for _w in range(0, w) :
row.append(v)
result.append(row)
return result
size = (600, 600)
img = Image.new('RGB', size)
h, w = size
matrix = initMatrix(h, w, (0, 0, 0))
m = []
m.append([-0.04, 0, -0.19, -0.47, -0.12, 0.3, 0.25])
m.append([0.65, 0, 0, 0.56, 0.06, 1.56, 0.25])
m.append([0.41, 0.46, -0.39, 0.61, 0.46, 0.4, 0.25])
m.append([0.52, -0.35, 0.25, 0.74, -0.48, 0.38, 0.25])
n = 0
x, y, a, b, c, d, e, f, newx, newy = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
while n < 300000 :
r = random.uniform(0, 1)
if r <= m[0][6] :
a=m[0][0]
b=m[0][1]
c=m[0][2]
d=m[0][3]
e=m[0][4]
f=m[0][5]
elif r <= m[0][6] + m[1][6] :
a=m[1][0]
b=m[1][1]
c=m[1][2]
d=m[1][3]
e=m[1][4]
f=m[1][5]
elif r <= m[0][6] + m[1][6] + m[2][6] :
a=m[2][0]
b=m[2][1]
c=m[2][2]
d=m[2][3]
e=m[2][4]
f=m[2][5]
else :
a=m[3][0]
b=m[3][1]
c=m[3][2]
d=m[3][3]
e=m[3][4]
f=m[3][5]
newx = (a * x) + (b * y) + e
newy = (c * x) + (d * y) + f
x = newx
y = newy
matrix[(int)(400 - 100 * y)][(int)(300 + 100 * x)] = ((int)(x * 50 * r), (int)(r * 100), (int)(y * 200 * r))
n += 1
modifyImageObj(img, matrix)
img.show()
img.save('frac.jpg')