Trying assembling pictures with PIL
This commit is contained in:
@@ -9,6 +9,7 @@ from glob import glob
|
|||||||
from sys import exit
|
from sys import exit
|
||||||
from time import sleep
|
from time import sleep
|
||||||
|
|
||||||
|
from PIL import Image
|
||||||
import pygame
|
import pygame
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -24,6 +25,9 @@ except ImportError:
|
|||||||
# Screen size
|
# Screen size
|
||||||
display_size = (1024, 600)
|
display_size = (1024, 600)
|
||||||
|
|
||||||
|
# Maximum size of assembled image
|
||||||
|
image_size = (2352, 1568)
|
||||||
|
|
||||||
# Idle image
|
# Idle image
|
||||||
image_idle = "idle.jpg"
|
image_idle = "idle.jpg"
|
||||||
|
|
||||||
@@ -118,7 +122,7 @@ class GUI_PyGame:
|
|||||||
|
|
||||||
def show_message(self, msg):
|
def show_message(self, msg):
|
||||||
# Choose font
|
# Choose font
|
||||||
font = pygame.font.Font(None, 72)
|
font = pygame.font.Font(None, 48)
|
||||||
# Render text
|
# Render text
|
||||||
text = font.render(msg, 1, (10,10,10))
|
text = font.render(msg, 1, (10,10,10))
|
||||||
# Position and display text
|
# Position and display text
|
||||||
@@ -171,7 +175,7 @@ class Camera:
|
|||||||
raise CameraException("Can't call gphoto2!")
|
raise CameraException("Can't call gphoto2!")
|
||||||
# Handle non-fatal errors
|
# Handle non-fatal errors
|
||||||
if "Canon EOS Capture failed: 2019" in output:
|
if "Canon EOS Capture failed: 2019" in output:
|
||||||
raise CameraException("Cannot focus! Move a little bit and try again!")
|
raise CameraException("Can't focus! Move and try again!")
|
||||||
elif "ERROR" in output:
|
elif "ERROR" in output:
|
||||||
raise CameraException("Unknown error:\n" + output)
|
raise CameraException("Unknown error:\n" + output)
|
||||||
# Return the command line output
|
# Return the command line output
|
||||||
@@ -191,6 +195,22 @@ class Camera:
|
|||||||
### Functions ###
|
### Functions ###
|
||||||
#################
|
#################
|
||||||
|
|
||||||
|
def assemble_pictures(input_filenames, output_filename):
|
||||||
|
"""Assembles four pictures into a 2x2 grid"""
|
||||||
|
# Thumbnail size of pictures
|
||||||
|
size = (int(image_size[0]/2),int(image_size[0]/2))
|
||||||
|
# Create output image
|
||||||
|
output_image = Image.new('RGB', image_size)
|
||||||
|
# Load images and resize them
|
||||||
|
for i in range(2):
|
||||||
|
for j in range(2):
|
||||||
|
k = i * 2 + j
|
||||||
|
img = Image.open(input_filenames[k])
|
||||||
|
img.thumbnail(size)
|
||||||
|
offset = (j * size[0], i * size[1])
|
||||||
|
output_image.paste(img, offset)
|
||||||
|
output_image.save(output_filename, "JPEG")
|
||||||
|
|
||||||
def take_picture():
|
def take_picture():
|
||||||
"""Implements the picture taking routine"""
|
"""Implements the picture taking routine"""
|
||||||
display.clear()
|
display.clear()
|
||||||
@@ -205,19 +225,28 @@ def take_picture():
|
|||||||
display.show_message(str(3 - i))
|
display.show_message(str(3 - i))
|
||||||
display.apply()
|
display.apply()
|
||||||
sleep(1)
|
sleep(1)
|
||||||
|
#
|
||||||
|
display.clear()
|
||||||
|
display.show_message("C H E E S E !")
|
||||||
|
display.apply()
|
||||||
# Extract display and image sizes
|
# Extract display and image sizes
|
||||||
size = display.get_size()
|
size = display.get_size()
|
||||||
image_size = (int(size[0]/2), int(size[1]/2))
|
outsize = (int(size[0]/2), int(size[1]/2))
|
||||||
# Take pictures
|
# Take pictures
|
||||||
filenames = [i for i in range(4)]
|
filenames = [i for i in range(4)]
|
||||||
for x in range(4):
|
for x in range(4):
|
||||||
filenames[x] = camera.take_picture(images.get_next())
|
# filenames[x] = camera.take_picture(images.get_next())
|
||||||
|
filenames[x] = camera.take_picture("/tmp/photobooth_%02d.jpg" % x)
|
||||||
|
# Assemble them
|
||||||
|
outfile = images.get_next()
|
||||||
|
assemble_pictures(filenames, outfile)
|
||||||
# Show pictures for 10 seconds
|
# Show pictures for 10 seconds
|
||||||
display.clear()
|
display.clear()
|
||||||
display.show_picture(filenames[0], image_size, (0,0))
|
display.show_picture(outfile, outsize, (0,0))
|
||||||
display.show_picture(filenames[1], image_size, (image_size[0],0))
|
# display.show_picture(filenames[0], outsize, (0,0))
|
||||||
display.show_picture(filenames[2], image_size, (0,image_size[1]))
|
# display.show_picture(filenames[1], outsize, (outsize[0],0))
|
||||||
display.show_picture(filenames[3], image_size, (image_size[0],image_size[1]))
|
# display.show_picture(filenames[2], outsize, (0,outsize[1]))
|
||||||
|
# display.show_picture(filenames[3], outsize, (outsize[0],outsize[1]))
|
||||||
display.apply()
|
display.apply()
|
||||||
sleep(display_time)
|
sleep(display_time)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user