mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-31 12:03:46 +00:00 
			
		
		
		
	integrations: Generate avatars using pyvips.
This commit is contained in:
		
				
					committed by
					
						 Alex Vandiver
						Alex Vandiver
					
				
			
			
				
	
			
			
			
						parent
						
							215c22ec3d
						
					
				
				
					commit
					5ff4d9f88a
				
			| @@ -1,6 +1,5 @@ | ||||
| #!/usr/bin/env python3 | ||||
| import argparse | ||||
| import io | ||||
| import os | ||||
| import sys | ||||
|  | ||||
| @@ -16,43 +15,21 @@ import django | ||||
|  | ||||
| django.setup() | ||||
|  | ||||
| import cairosvg | ||||
| from PIL import Image | ||||
| import pyvips | ||||
|  | ||||
| from zerver.lib.integrations import INTEGRATIONS | ||||
| from zerver.lib.storage import static_path | ||||
| from zerver.lib.thumbnail import DEFAULT_AVATAR_SIZE, resize_avatar | ||||
|  | ||||
|  | ||||
| def create_square_image(png: bytes) -> bytes: | ||||
|     img = Image.open(io.BytesIO(png)) | ||||
|     if img.height == img.width: | ||||
|         return png | ||||
|  | ||||
|     size = max(img.height, img.width) | ||||
|     new_img = Image.new("RGBA", (size, size), color=(0, 0, 0, 0)) | ||||
|     padding = int(abs(img.height - img.width) / 2) | ||||
|     position = (0, padding) if img.height < img.width else (padding, 0) | ||||
|     new_img.paste(img, position) | ||||
|     out = io.BytesIO() | ||||
|     new_img.save(out, format="png") | ||||
|     return out.getvalue() | ||||
| from zerver.lib.thumbnail import DEFAULT_AVATAR_SIZE | ||||
|  | ||||
|  | ||||
| def create_integration_bot_avatar(logo_path: str, bot_avatar_path: str) -> None: | ||||
|     if logo_path.endswith(".svg"): | ||||
|         avatar = cairosvg.svg2png( | ||||
|             url=logo_path, output_width=DEFAULT_AVATAR_SIZE, output_height=DEFAULT_AVATAR_SIZE | ||||
|         ) | ||||
|     else: | ||||
|         with open(logo_path, "rb") as f: | ||||
|             image = f.read() | ||||
|         square_image = create_square_image(image) | ||||
|         avatar = resize_avatar(square_image) | ||||
|  | ||||
|     os.makedirs(os.path.dirname(bot_avatar_path), exist_ok=True) | ||||
|     with open(bot_avatar_path, "wb") as f: | ||||
|         f.write(avatar) | ||||
|     avatar = pyvips.Image.thumbnail(logo_path, DEFAULT_AVATAR_SIZE, height=DEFAULT_AVATAR_SIZE) | ||||
|     if avatar.height != avatar.width: | ||||
|         avatar = avatar.gravity( | ||||
|             pyvips.CompassDirection.CENTRE, DEFAULT_AVATAR_SIZE, DEFAULT_AVATAR_SIZE | ||||
|         ) | ||||
|     avatar.write_to_file(bot_avatar_path) | ||||
|  | ||||
|  | ||||
| def generate_integration_bots_avatars(check_missing: bool = False) -> None: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user