version with cairo lib
This commit is contained in:
82
clock_cairo.py
Normal file
82
clock_cairo.py
Normal file
@@ -0,0 +1,82 @@
|
||||
#from PIL import Image, ImageDraw
|
||||
from datetime import datetime
|
||||
import math
|
||||
import cairo
|
||||
|
||||
|
||||
def draw_clock(size=(800, 480), r=210, mirror=False):
|
||||
surface = cairo.ImageSurface(cairo.FORMAT_RGB24, size[0], size[1])
|
||||
context = cairo.Context(surface)
|
||||
now = datetime.now()
|
||||
|
||||
# im = Image.new('RGBA', size, (0, 0, 0, 255))
|
||||
context.save()
|
||||
context.translate(size[0]/2, size[1]/2) #translate to center
|
||||
if mirror:
|
||||
context.scale(-1, 1)
|
||||
|
||||
#draw watch face
|
||||
context.set_source_rgb(0.7, 0.7, 0.7)
|
||||
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
|
||||
context.save()
|
||||
context.set_line_width(thick*r/180)
|
||||
context.rotate(angle)
|
||||
context.move_to(0, r)
|
||||
context.line_to(0, len)
|
||||
context.stroke()
|
||||
context.restore()
|
||||
|
||||
#draw hour pointer
|
||||
base = r * 0.015
|
||||
context.save()
|
||||
context.rotate((now.hour + (now.minute + now.second / 60) / 60) / 12 * 2 * math.pi)
|
||||
context.set_line_width(10*r/180)
|
||||
context.set_source_rgb(1, 1, 1)
|
||||
context.move_to(+base, r * 0.2)
|
||||
context.line_to(0, -r * 0.65)
|
||||
context.line_to(-base, r * 0.2)
|
||||
context.stroke()
|
||||
context.restore()
|
||||
|
||||
#draw minute pointer
|
||||
base = r * 0.02
|
||||
context.save()
|
||||
context.rotate((now.minute + now.second / 60) / 60 * 2 * math.pi)
|
||||
context.set_line_width(8*r/180)
|
||||
context.set_source_rgb(1, 1, 1)
|
||||
context.move_to(+base, r * 0.2)
|
||||
context.line_to(0, -r * 0.95)
|
||||
context.line_to(-base, r * 0.2)
|
||||
context.stroke()
|
||||
context.restore()
|
||||
|
||||
#draw second pointer
|
||||
context.save()
|
||||
context.rotate((now.second + now.microsecond / 1000000) / 60 * 2 * math.pi)
|
||||
context.set_line_width(4*r/180)
|
||||
context.set_source_rgb(1, 0, 0)
|
||||
context.move_to(0, r * 0.3)
|
||||
context.line_to(0, -r * 0.8)
|
||||
context.stroke()
|
||||
context.arc(0, -r * 0.8, r * 0.06, 0, 2*math.pi)
|
||||
context.fill()
|
||||
context.arc(0, 0, r * 0.03, 0, 2*math.pi)
|
||||
context.fill()
|
||||
context.restore()
|
||||
|
||||
|
||||
context.restore()
|
||||
|
||||
return surface
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
draw_clock().write_to_png("clock.png")
|
||||
# import matplotlib.pyplot as plt
|
||||
# plt.imshow(draw_clock())
|
||||
# plt.show()
|
Reference in New Issue
Block a user