from shutil import copyfile from PIL import Image, ImageFont, ImageDraw from pysstv import color import logging as log try: from picamera import PiCamera except ImportError: PiCamera = None def take_photo(): """ All the steps required to take a photograph should be here. Including: lifting/wiping camera taking the photo and saving it. """ # Copy in the test pattern png (if photo process errors out, this will be used instead) log.debug('Copying test pattern.') copyfile('photos/TEST_PATTERN.jpg', 'working/working.jpg') # Software to take the photo should be here # copyfile('photos/camera_latest.jpg', 'working/working.jpg') log.debug('Initializing camera.') try: camera = PiCamera() log.info('Saving photo.') camera.capture('working/working.jpg') log.info('Photo saved.') except TypeError: log.info('Unable to capture photo, assuming dev environment.') def mark_photo(): log.info('Opening photo for viewing.') raw_img = Image.open("working/working.jpg") # Open the current working image log.info('Resizing image.') img = raw_img.resize((320, 240), Image.ANTIALIAS) # resize it for the radio log.info('Drawing on image.') if False: TINT_COLOR = (255, 255, 255) # White text bg TEXT_COLOR = (0, 0, 0) else: TINT_COLOR = (0, 0, 0) # Black text bg TEXT_COLOR = (255, 255, 255) TRANSPARENCY = .25 # Degree of transparency, 0-100% OPACITY = int(255 * TRANSPARENCY) overlay = Image.new('RGBA', img.size, TINT_COLOR + (0,)) draw = ImageDraw.Draw(overlay) # bigfont = ImageFont.truetype(r'C:\Users\System-Pc\Desktop\arial.ttf', 20) # smallfont = ImageFont.truetype(r'C:\Users\System-Pc\Desktop\arial.ttf', 17) draw.rectangle(((0, 0), (90, 20)), fill=TINT_COLOR + (OPACITY,)) # draw.text((0, 0),"KW1FOX",TEXT_COLOR,font=bigfont) # Draw KW1FOX in the top left draw.rectangle(((0, 40), (83, 80)), fill=TINT_COLOR + (OPACITY,)) # draw.text((0, 40),"day: 25.2",TEXT_COLOR,font=smallfont) # draw.text((0, 60),"Volt: 13.8",TEXT_COLOR,font=smallfont) # draw.text((0, 80),"Miles: 1.02",TEXT_COLOR,font=smallfont) log.info('Converting image color.') img = img.convert("RGBA") img = Image.alpha_composite(img, overlay) img = img.convert("RGB") img.save('working/working.jpg') # Save the working image return img if __name__ == "__main__": log.basicConfig(level=log.DEBUG) # Take photograph. log.info('Taking Photograph') take_photo() # Saves a photograph to the working/working.jpg location log.info('Done taking photo.') # Draw neccicary text on photo log.info('Drawing on photo.') radio_photo = mark_photo() # draws text on working/working.jpg and returns a PIL image log.info('Done drawing on photo.') log.info('Creating slowscan.') # slowscan = color.Robot36(radio_photo, 48000, 16) # Image, rate, bits slowscan = color.MartinM1(radio_photo, 48000, 16) # Image, rate, bits log.info('Saving out slowscan.') slowscan.write_wav('working/working.wav') # sstv('working/working.png', 'working/radio.wav', mode='Robot36')