diff --git a/modules/inky_image.py b/modules/inky_image.py deleted file mode 100644 index 541492d..0000000 --- a/modules/inky_image.py +++ /dev/null @@ -1,166 +0,0 @@ -#!/usr/bin/python3 -# -*- coding: utf-8 -*- -""" -Experimental image module for Inky-Calendar software -Displays an image on the E-Paper. Work in progress! -Copyright by aceisace -""" -from __future__ import print_function -from configuration import * -from os import path -from PIL import ImageOps -import requests -import numpy - -"""----------------------------------------------------------------""" -path = 'https://github.com/aceisace/Inky-Calendar/raw/master/Gallery/Inky-Calendar-logo.png' -mode = 'auto' # 'horizontal' # 'vertical' # 'auto' -upside_down = False # Flip image by 180 deg (upside-down) -alignment = 'center' # top_center, top_left, center_left, bottom_right etc. -colours = 'bwr' # bwr # bwy # bw -render = True # show image on E-Paper? -"""----------------------------------------------------------------""" - -"""Try to open the image if it exists and is an image file""" -try: - if 'http' in path: - im = Image.open(requests.get(path, stream=True).raw) - else: - im = Image.open(path) -except FileNotFoundError: - print('Your file could not be found. Please check the path to your file.') - raise -except OSError: - print('Please check if the path points to an image file.') - raise - -"""Turn image upside-down if specified""" -if upside_down == True: - im.rotate(180, expand = True) - -if mode == 'horizontal': - display_width, display_height == display_height, display_width - -if mode == 'vertical': - pass - -if mode == 'auto': - if (im.width > im.height) and (display_width < display_height): - print('display vertical, image horizontal -> flipping image') - im = im.rotate(90, expand=True) - if (im.width < im.height) and (display_width > display_height): - print('display horizontal, image vertical -> flipping image') - im = im.rotate(90, expand=True) - -def fit_width(image, width): - """Resize an image to desired width""" - print('resizing width from', image.width, 'to', end = ' ') - wpercent = (display_width/float(image.width)) - hsize = int((float(image.height)*float(wpercent))) - img = image.resize((width, hsize), Image.ANTIALIAS) - print(img.width) - return img - -def fit_height(image, height): - """Resize an image to desired height""" - print('resizing height from', image.height, 'to', end = ' ') - hpercent = (height / float(image.height)) - wsize = int(float(image.width) * float(hpercent)) - img = image.resize((wsize, height), Image.ANTIALIAS) - print(img.height) - return img - -if im.width > display_width: - im = fit_width(im, display_width) -if im.height > display_height: - im = fit_height(im, display_height) - -if alignment == 'center': - x,y = int((display_width-im.width)/2), int((display_height-im.height)/2) -elif alignment == 'center_right': - x, y = display_width-im.width, int((display_height-im.height)/2) -elif alignment == 'center_left': - x, y = 0, int((display_height-im.height)/2) - -elif alignment == 'top_center': - x, y = int((display_width-im.width)/2), 0 -elif alignment == 'top_right': - x, y = display_width-im.width, 0 -elif alignment == 'top_left': - x, y = 0, 0 - -elif alignment == 'bottom_center': - x, y = int((display_width-im.width)/2), display_height-im.height -elif alignment == 'bottom_right': - x, y = display_width-im.width, display_height-im.height -elif alignment == 'bottom_left': - x, y = display_width-im.width, display_height-im.height - -if len(im.getbands()) == 4: - print('removing transparency') - bg = Image.new('RGBA', (im.width, im.height), 'white') - im = Image.alpha_composite(bg, im) - -image.paste(im, (x,y)) -im = image - -if colours == 'bw': - """For black-white images, use monochrome dithering""" - black = im.convert('1', dither=True) -elif colours == 'bwr': - """For black-white-red images, create corresponding palette""" - pal = [255,255,255, 0,0,0, 255,0,0, 255,255,255] -elif colours == 'bwy': - """For black-white-yellow images, create corresponding palette""" - pal = [255,255,255, 0,0,0, 255,255,0, 255,255,255] - - -"""Map each pixel of the opened image to the Palette""" -if colours != 'bw': - palette_im = Image.new('P', (3,1)) - palette_im.putpalette(pal * 64) - quantized_im = im.quantize(palette=palette_im) - quantized_im.convert('RGB') - - """Create buffer for coloured pixels""" - buffer1 = numpy.array(quantized_im.convert('RGB')) - r1,g1,b1 = buffer1[:, :, 0], buffer1[:, :, 1], buffer1[:, :, 2] - - """Create buffer for black pixels""" - buffer2 = numpy.array(quantized_im.convert('RGB')) - r2,g2,b2 = buffer2[:, :, 0], buffer2[:, :, 1], buffer2[:, :, 2] - - if colours == 'bwr': - """Create image for only red pixels""" - buffer2[numpy.logical_and(r2 == 0, b2 == 0)] = [255,255,255] # black->white - buffer2[numpy.logical_and(r2 == 255, b2 == 0)] = [0,0,0] #red->black - colour = Image.fromarray(buffer2) - """Create image for only black pixels""" - buffer1[numpy.logical_and(r1 == 255, b1 == 0)] = [255,255,255] - black = Image.fromarray(buffer1) - - if colours == 'bwy': - """Create image for only yellow pixels""" - buffer2[numpy.logical_and(r2 == 0, b2 == 0)] = [255,255,255] # black->white - buffer2[numpy.logical_and(g2 == 255, b2 == 0)] = [0,0,0] #yellow -> black - colour = Image.fromarray(buffer2) - """Create image for only black pixels""" - buffer1[numpy.logical_and(g1 == 255, b1 == 0)] = [255,255,255] - black = Image.fromarray(buffer1) - -if render == True: - epaper = driver.EPD() - print('Initialising E-Paper...', end = '') - epaper.init() - print('Done') - - print('Sending image data and refreshing display...', end='') - if three_colour_support == True: - epaper.display(epaper.getbuffer(black), epaper.getbuffer(colour)) - else: - epaper.display(epaper.getbuffer(black)) - print('Done') - - print('Sending E-Paper to deep sleep...', end = '') - epaper.sleep() -print('Done')