Encode PIL Image to base64 data URL string. Args: img: PIL Image object. target_size: Maximum dimension for thumbnail (-1 to skip resizing). fmt: Output format (default: JPEG). Returns: Base64 encoded data URL string.
(img, target_size=-1, fmt="JPEG")
| 17 | |
| 18 | |
| 19 | def encode_image_to_base64(img, target_size=-1, fmt="JPEG"): |
| 20 | """Encode PIL Image to base64 data URL string. |
| 21 | |
| 22 | Args: |
| 23 | img: PIL Image object. |
| 24 | target_size: Maximum dimension for thumbnail (-1 to skip resizing). |
| 25 | fmt: Output format (default: JPEG). |
| 26 | |
| 27 | Returns: |
| 28 | Base64 encoded data URL string. |
| 29 | """ |
| 30 | if target_size > 0: |
| 31 | img.thumbnail((target_size, target_size)) |
| 32 | img_buffer = io.BytesIO() |
| 33 | img.save(img_buffer, format=fmt) |
| 34 | image_data = img_buffer.getvalue() |
| 35 | img_buffer.close() # Explicitly close BytesIO to free memory |
| 36 | image_base64 = base64.b64encode(image_data).decode("utf-8") |
| 37 | del image_data # Explicitly delete large object |
| 38 | return f"data:image/jpeg;base64,{image_base64}" |
| 39 | |
| 40 | |
| 41 | # ============================================================================== |