Added experimental image renderer
This commit is contained in:
		
							
								
								
									
										83
									
								
								modules/inkycal_image.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								modules/inkycal_image.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,83 @@ | |||||||
|  | #!/usr/bin/python3 | ||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | """ | ||||||
|  | Experimental image module for Inky-Calendar software | ||||||
|  | Displays an image on the E-Paper. Currently only supports black and white | ||||||
|  | Copyright by aceisace | ||||||
|  | """ | ||||||
|  | from __future__ import print_function | ||||||
|  | from PIL import Image | ||||||
|  | from configuration import * | ||||||
|  | import os | ||||||
|  |  | ||||||
|  | import inkycal_drivers as drivers | ||||||
|  |  | ||||||
|  | display = drivers.EPD() | ||||||
|  |  | ||||||
|  | # Where is the image? | ||||||
|  | path = '/home/pi//Desktop/test.JPG' | ||||||
|  |  | ||||||
|  | class inkycal_image: | ||||||
|  |  | ||||||
|  |   def __init__(self, path): | ||||||
|  |     self.image = Image.open(path) | ||||||
|  |     self.im_width = self.image.width | ||||||
|  |     self.im_height = self.image.height | ||||||
|  |  | ||||||
|  |   def check_mode(self): | ||||||
|  |     if self.image.mode != 'RGB' or 'L' or '1': | ||||||
|  |       print('Image mode not supported, converting') | ||||||
|  |       self.image = self.image.convert('RGB') | ||||||
|  |  | ||||||
|  |   def preview(self): | ||||||
|  |     self.image.save(path+'temp.png') | ||||||
|  |     os.system("gpicview "+path+'temp.png') | ||||||
|  |     os.system('rm '+path+'temp.png') | ||||||
|  |      | ||||||
|  |  | ||||||
|  |   def check_size(self, alignment = 'middle', padding_colour='white'): | ||||||
|  |     if display_height < self.im_height or display_width < self.im_width: | ||||||
|  |       print('Image too large for the display, cropping image') | ||||||
|  |       if alignment == 'middle' or None: | ||||||
|  |         x1 = int((self.im_width - display_width) / 2) | ||||||
|  |         y1 = int((self.im_height - display_height) / 2) | ||||||
|  |         x2,y2 = x1+display_width, y1+display_height | ||||||
|  |         self.image = self.image.crop((x1,y1,x2,y2)) | ||||||
|  |          | ||||||
|  |       if alignment != 'middle' or None: | ||||||
|  |         print('Sorry, this feature has not been implemented yet') | ||||||
|  |         raise NotImplementedError | ||||||
|  |  | ||||||
|  |     elif display_height > self.im_height and display_width > self.im_width: | ||||||
|  |       print('Image smaller than display, shifting image to center') | ||||||
|  |       x = int( (display_width - self.im_width) /2) | ||||||
|  |       y = int( (display_height - self.im_height) /2) | ||||||
|  |       canvas = Image.new('RGB', (display_width, display_height), color=padding_colour) | ||||||
|  |       canvas.paste(self.image, (x,y)) | ||||||
|  |       self.image = canvas | ||||||
|  |  | ||||||
|  |     else: | ||||||
|  |       print('Image file exact. no further action required') | ||||||
|  |  | ||||||
|  |   def auto_flip(self): | ||||||
|  |     if self.im_height < self.im_width: | ||||||
|  |       print('rotating image') | ||||||
|  |       self.image = self.image.rotate(270, expand=True) | ||||||
|  |       self.im_width = self.image.width | ||||||
|  |       self.im_height = self.image.height | ||||||
|  |        | ||||||
|  |    | ||||||
|  |   def to_mono(self): | ||||||
|  |     self.image = self.image.convert('1', dither=True) | ||||||
|  |  | ||||||
|  |   def prepare_image(self, alignment='middle'): | ||||||
|  |     self.check_mode() | ||||||
|  |     self.auto_flip() | ||||||
|  |     self.check_size(alignment = alignment) | ||||||
|  |     self.to_mono() | ||||||
|  |  | ||||||
|  |     return self.image | ||||||
|  |  | ||||||
|  | #single line command: | ||||||
|  | display.show_image(inkycal_image(path).prepare_image(), reduce_colours=False) | ||||||
|  |          | ||||||
		Reference in New Issue
	
	Block a user