clock with pillow
This commit is contained in:
70
clock_pillow.py
Normal file
70
clock_pillow.py
Normal file
@@ -0,0 +1,70 @@
|
||||
from datetime import datetime
|
||||
import math
|
||||
|
||||
from PIL import Image
|
||||
from PIL import ImageDraw
|
||||
from PIL import ImageFont
|
||||
|
||||
|
||||
def rgb(r=0, g=None, b=None):
|
||||
if g == None:
|
||||
g = r
|
||||
if b == None:
|
||||
b = r
|
||||
return "rgb(%d,%d,%d)" % (r*255, g*255, b*255)
|
||||
|
||||
#rotate round center
|
||||
def rrc(tuple, center, angle):
|
||||
sin = math.sin(angle)
|
||||
cos = math.cos(angle)
|
||||
tpl = (tuple[0] - center[0], tuple[1] - center[1])
|
||||
tpl = tuple
|
||||
return (int(tpl[0] * sin + tpl[1] * cos + center[0]), int(tpl[1] * sin - tpl[0] * cos + center[1]))
|
||||
|
||||
|
||||
def draw_clock(size=(800, 480), pixelformat="RGBA", r=210, mirror=False):
|
||||
image = Image.new(pixelformat, size)
|
||||
#font = ImageFont.truetype(font="consola.ttf", size=40)
|
||||
draw = ImageDraw.Draw(image)
|
||||
|
||||
now = datetime.now()
|
||||
|
||||
#draw watch face
|
||||
center = (size[0] / 2, size[1] / 2)
|
||||
for i12 in range(12):
|
||||
for i5 in range(5):
|
||||
angle = (i12 * 5 + i5) / 60 * 2 * math.pi
|
||||
len = r * 0.93 if i5 == 0 else r * 0.97
|
||||
thick = 5 if i5 == 0 else 2
|
||||
sin = math.sin(angle)
|
||||
cos = math.cos(angle)
|
||||
draw.line([(sin * len + center[0], cos * len + center[1]), (sin * r + center[0], cos * r + center[1])], fill=rgb(0.7), width=thick)
|
||||
|
||||
#draw hour pointer
|
||||
base = r * 0.015
|
||||
angle = (now.hour + (now.minute + now.second / 60) / 60) / 12 * 2 * math.pi + math.pi / 2
|
||||
thick = 10*r/180
|
||||
draw.line([rrc((+base, r * 0.2), center, angle), rrc((0, -r * 0.65), center, angle), rrc((-base, r * 0.2), center, angle)], fill=rgb(1), width=int(thick))
|
||||
|
||||
#draw minute pointer
|
||||
base = r * 0.02
|
||||
angle = (now.minute + now.second / 60) / 60 * 2 * math.pi + math.pi / 2
|
||||
thick = 8*r/180
|
||||
draw.line([rrc((+base, r * 0.2), center, angle), rrc((0, -r * 0.95), center, angle), rrc((-base, r * 0.2), center, angle)], fill=rgb(1), width=int(thick))
|
||||
|
||||
#draw second pointer
|
||||
angle = (now.second + now.microsecond / 1000000) / 60 * 2 * math.pi / 2
|
||||
thick = 4*r/180
|
||||
draw.line([rrc((0, r * 0.3), center, angle), rrc((0, -r * 0.8), center, angle)], fill=rgb(1, 0, 0), width=int(thick))
|
||||
e_center = rrc((0, -r * 0.8), center, angle)
|
||||
e_r = r * 0.06
|
||||
draw.ellipse([(e_center[0] - e_r, e_center[1] - e_r), (e_center[0] + e_r, e_center[1] + e_r)], fill=rgb(1, 0, 0), outline=None)
|
||||
e_center = center
|
||||
e_r = r * 0.03
|
||||
draw.ellipse([(e_center[0] - e_r, e_center[1] - e_r), (e_center[0] + e_r, e_center[1] + e_r)], fill=rgb(1, 0, 0), outline=None)
|
||||
|
||||
return image
|
||||
|
||||
if __name__ == "__main__":
|
||||
pil_image = draw_clock(pixelformat="RGB")
|
||||
pil_image.save("clock.png", format="png")
|
Reference in New Issue
Block a user