Merge pull request #320 from aceinnolab/feature/#281
Fix an issue with alignment of text
This commit is contained in:
		| @@ -110,7 +110,7 @@ def auto_fontsize(font, max_height): | |||||||
|  |  | ||||||
|  |  | ||||||
| def write(image, xy, box_size, text, font=None, **kwargs): | def write(image, xy, box_size, text, font=None, **kwargs): | ||||||
|     """Writes text on a image. |     """Writes text on an image. | ||||||
|  |  | ||||||
|     Writes given text at given position on the specified image. |     Writes given text at given position on the specified image. | ||||||
|  |  | ||||||
| @@ -129,9 +129,9 @@ def write(image, xy, box_size, text, font=None, **kwargs): | |||||||
|       - colour: black by default, do not change as it causes issues with rendering |       - colour: black by default, do not change as it causes issues with rendering | ||||||
|         on e-Paper. |         on e-Paper. | ||||||
|       - rotation: Rotate the text with the text-box by a given angle anti-clockwise. |       - rotation: Rotate the text with the text-box by a given angle anti-clockwise. | ||||||
|       - fill_width: Decimal representing a percentage e.g. 0.9 # 90%. Fill a |       - fill_width: Decimal representing a percentage e.g. 0.9 # 90%. Fill | ||||||
|         maximum of 90% of the size of the full width of text-box. |         maximum of 90% of the size of the full width of text-box. | ||||||
|       - fill_height: Decimal representing a percentage e.g. 0.9 # 90%. Fill a |       - fill_height: Decimal representing a percentage e.g. 0.9 # 90%. Fill | ||||||
|         maximum of 90% of the size of the full height of the text-box. |         maximum of 90% of the size of the full height of the text-box. | ||||||
|     """ |     """ | ||||||
|     allowed_kwargs = ['alignment', 'autofit', 'colour', 'rotation', |     allowed_kwargs = ['alignment', 'autofit', 'colour', 'rotation', | ||||||
| @@ -140,7 +140,7 @@ def write(image, xy, box_size, text, font=None, **kwargs): | |||||||
|     # Validate kwargs |     # Validate kwargs | ||||||
|     for key, value in kwargs.items(): |     for key, value in kwargs.items(): | ||||||
|         if key not in allowed_kwargs: |         if key not in allowed_kwargs: | ||||||
|             print('{0} does not exist'.format(key)) |             print(f'{key} does not exist') | ||||||
|  |  | ||||||
|     # Set kwargs if given, it not, use defaults |     # Set kwargs if given, it not, use defaults | ||||||
|     alignment = kwargs['alignment'] if 'alignment' in kwargs else 'center' |     alignment = kwargs['alignment'] if 'alignment' in kwargs else 'center' | ||||||
| @@ -176,7 +176,7 @@ def write(image, xy, box_size, text, font=None, **kwargs): | |||||||
|     text_bbox_height = font.getbbox("hg") |     text_bbox_height = font.getbbox("hg") | ||||||
|     text_height = text_bbox_height[3] - text_bbox_height[1] |     text_height = text_bbox_height[3] - text_bbox_height[1] | ||||||
|  |  | ||||||
|     # Truncate text if text is too long so it can fit inside the box |     # Truncate text if text is too long, so it can fit inside the box | ||||||
|     if (text_width, text_height) > (box_width, box_height): |     if (text_width, text_height) > (box_width, box_height): | ||||||
|         logs.debug(('truncating {}'.format(text))) |         logs.debug(('truncating {}'.format(text))) | ||||||
|         while (text_width, text_height) > (box_width, box_height): |         while (text_width, text_height) > (box_width, box_height): | ||||||
| @@ -195,18 +195,16 @@ def write(image, xy, box_size, text, font=None, **kwargs): | |||||||
|     elif alignment == 'right': |     elif alignment == 'right': | ||||||
|         x = int(box_width - text_width) |         x = int(box_width - text_width) | ||||||
|  |  | ||||||
|     y = int((box_height / 2) - (text_height / 2)) |  | ||||||
|  |  | ||||||
|     # Draw the text in the text-box |     # Draw the text in the text-box | ||||||
|     draw = ImageDraw.Draw(image) |     draw = ImageDraw.Draw(image) | ||||||
|     space = Image.new('RGBA', (box_width, box_height)) |     space = Image.new('RGBA', (box_width, box_height)) | ||||||
|     ImageDraw.Draw(space).text((x, y), text, fill=colour, font=font) |     ImageDraw.Draw(space).text((x, 0), text, fill=colour, font=font) | ||||||
|  |  | ||||||
|     # Uncomment following two lines, comment out above two lines to show |     # Uncomment following two lines, comment out above two lines to show | ||||||
|     # red text-box with white text (debugging purposes) |     # red text-box with white text (debugging purposes) | ||||||
|  |  | ||||||
|     # space = Image.new('RGBA', (box_width, box_height), color= 'red') |     # space = Image.new('RGBA', (box_width, box_height), color= 'red') | ||||||
|     # ImageDraw.Draw(space).text((x, y), text, fill='white', font=font) |     # ImageDraw.Draw(space).text((x, 0), text, fill='white', font=font, anchor="la") | ||||||
|  |  | ||||||
|     if rotation: |     if rotation: | ||||||
|         space.rotate(rotation, expand=True) |         space.rotate(rotation, expand=True) | ||||||
|   | |||||||
							
								
								
									
										12
									
								
								tests/test_functions.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								tests/test_functions.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | """ | ||||||
|  | Test the functions in the functions module. | ||||||
|  | """ | ||||||
|  | from PIL import Image, ImageFont | ||||||
|  | from inkycal.custom import write, fonts | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def test_write(): | ||||||
|  |     im = Image.new("RGB", (500, 200), "white") | ||||||
|  |     font = ImageFont.truetype(fonts['NotoSans-SemiCondensed'], size = 40) | ||||||
|  |     write(im, (125,75), (250, 50), "Hello World", font) | ||||||
|  |     # im.show() | ||||||
		Reference in New Issue
	
	Block a user