renamed inky_image to inkycal_image
This commit is contained in:
		| @@ -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') |  | ||||||
		Reference in New Issue
	
	Block a user