39 lines
902 B
Python
39 lines
902 B
Python
from PIL import Image, ImageDraw
|
|
|
|
|
|
def draw_wu_line(draw, x, y, w, h):
|
|
# Without loss of generality only lines in the first oc
|
|
assert w > 0 and h > 0 and w > h
|
|
k = 0xffff * h // w
|
|
d = k >> 1
|
|
while w > 0:
|
|
w -= 1
|
|
intensity = d >> 8
|
|
draw.point([(x, y )], fill=(0, 0, 0, 0xff - intensity))
|
|
draw.point([(x, y + 1)], fill=(0, 0, 0, intensity))
|
|
x += 1
|
|
if d + k >= 0xFFFF:
|
|
d = k - (0xFFFF - d)
|
|
y += 1
|
|
else:
|
|
d += k
|
|
|
|
size = 100, 50
|
|
im = Image.new('RGBA', size)
|
|
d = ImageDraw.Draw(im, 'RGBA')
|
|
|
|
# Diagonal line
|
|
#draw_wu_line(d, 0, 0, *size)
|
|
|
|
# Nearly 45 degrees.
|
|
#draw_wu_line(d, 0, 0, 51, 50)
|
|
|
|
# Nearly horizontal line.
|
|
#draw_wu_line(d, 0, 0, 100, 5)
|
|
|
|
draw_wu_line(d, 0, 0, 100, 33)
|
|
|
|
base = Image.new('RGBA', size, (0xff, 0xff, 0xff, 0xff))
|
|
base.alpha_composite(im)
|
|
base.save('wu_demo.png')
|