69 lines
2.1 KiB
Python
69 lines
2.1 KiB
Python
# With credit to Ben Nuttall and for the original version of this code
|
|
|
|
from PIL import Image
|
|
from time import gmtime, strftime
|
|
from itertools import cycle
|
|
|
|
# Change these values for your own setup
|
|
overlays_dir = "/home/pi/allseeingpi/overlays"
|
|
pictures_dir = "/home/pi/allseeingpi"
|
|
overlays = ['girl', 'cowboy', 'top', 'pink', 'glassesnose', 'moustache', 'sunglasses', 'elvis', 'emo', 'blackhat', 'emo2', 'baseball', 'flowers', 'santa', 'alps', 'mop', 'glasses']
|
|
overlay = overlays[0]
|
|
|
|
# Overlay functions
|
|
def _get_overlay_image(overlay):
|
|
|
|
# Open the overlay as an Image object
|
|
return Image.open(overlays_dir + "/" + overlay + ".png")
|
|
|
|
def _pad(resolution, width=32, height=16):
|
|
# Pads the specified resolution
|
|
# up to the nearest multiple of *width* and *height*; this is
|
|
# needed because overlays require padding to the camera's
|
|
# block size (32x16)
|
|
return (
|
|
((resolution[0] + (width - 1)) // width) * width,
|
|
((resolution[1] + (height - 1)) // height) * height,
|
|
)
|
|
|
|
def remove_overlays(camera):
|
|
|
|
# Remove all overlays from the camera preview
|
|
for o in camera.overlays:
|
|
camera.remove_overlay(o)
|
|
|
|
def gen_filename():
|
|
|
|
# Generate a filename with a timestamp
|
|
filename = strftime(pictures_dir + "/image-%d-%m %H:%M.png", gmtime())
|
|
return filename
|
|
|
|
|
|
def preview_overlay(camera=None, overlay=None):
|
|
|
|
# Remove all overlays
|
|
remove_overlays(camera)
|
|
|
|
# Get an Image object of the chosen overlay
|
|
overlay_img = _get_overlay_image(overlay)
|
|
|
|
# Pad it to the right resolution
|
|
pad = Image.new('RGB', _pad(camera.resolution))
|
|
pad.paste(overlay_img, (0, 0))
|
|
|
|
# Add the overlay
|
|
camera.add_overlay(pad.tobytes(), alpha=128, layer=3)
|
|
|
|
def output_overlay(output=None, overlay=None):
|
|
|
|
# Take an overlay Image
|
|
overlay_img = _get_overlay_image(overlay)
|
|
|
|
# ...and a captured photo
|
|
output_img = Image.open(output).convert('RGBA')
|
|
|
|
# Combine the two and save the image as output
|
|
new_output = Image.alpha_composite(output_img, overlay_img)
|
|
new_output.save(output)
|
|
|
|
all_overlays = cycle(overlays)
|