tree rings example
This commit is contained in:
parent
b905cc991a
commit
ac976f10de
Binary file not shown.
After Width: | Height: | Size: 830 KiB |
|
@ -0,0 +1,45 @@
|
||||||
|
import axi
|
||||||
|
import math
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
|
def create_paths(im):
|
||||||
|
f = (255 * 255 * 3) ** 0.5
|
||||||
|
paths = []
|
||||||
|
w, h = im.size
|
||||||
|
for m in [-2, -1, 0, 1, 2]:
|
||||||
|
for radius in range(0, w, 8):
|
||||||
|
path = []
|
||||||
|
for a in range(1800):
|
||||||
|
a = math.radians(a / 10.0)
|
||||||
|
x = w / 2 + int(math.cos(a) * radius)
|
||||||
|
y = h - int(math.sin(a) * radius)
|
||||||
|
if x < 0 or x >= w:
|
||||||
|
continue
|
||||||
|
if y < 0 or y >= h:
|
||||||
|
continue
|
||||||
|
r, g, b = im.getpixel((x, y))
|
||||||
|
p = (r * r + g * g + b * b) ** 0.5
|
||||||
|
p = 1 - (p / f)
|
||||||
|
p = p ** 2
|
||||||
|
if p < 0.05:
|
||||||
|
if len(path) > 1:
|
||||||
|
paths.append(path)
|
||||||
|
path = []
|
||||||
|
else:
|
||||||
|
x = w / 2 + math.cos(a) * (radius + m * p * 1.5)
|
||||||
|
y = h - math.sin(a) * (radius + m * p * 1.5)
|
||||||
|
path.append((x, y))
|
||||||
|
if len(path) > 1:
|
||||||
|
paths.append(path)
|
||||||
|
return paths
|
||||||
|
|
||||||
|
def main():
|
||||||
|
paths = create_paths(Image.open(sys.argv[1]))
|
||||||
|
drawing = axi.Drawing(paths).rotate_and_scale_to_fit(11, 8.5, step=90)
|
||||||
|
drawing = drawing.sort_paths().join_paths(0.02)
|
||||||
|
axi.draw(drawing)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
Loading…
Reference in New Issue