my-psb/nice-scripts/reduce_b64_img.py

54 lines
1.9 KiB
Python

#!/usr/bin/env python3
# coding: utf8
"""
Author: freezed <git@freezed.me> 2019-09-06
Licence: `GNU GPL v3` GNU GPL v3: http://www.gnu.org/licenses/
"""
import io
import base64
from PIL import Image
def main(source_img_b64_str, height=100, width=100):
"""
Resize a Base64 string image
:param source_img_b64_str:
:param height: new height in pixel
:param width: new width in pixel
:type source_img_b64_str: str A full Base64 encoded image (PNG)
:type height: int
:type width: int
:return: The same image resized Base64 encoded
:rtype: str
:Tests:
>>> src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAS4AAACYCAYAAABapASfAAAA5klEQVR4nO3UsQ2AMBAEwe2U778JSCjAkS3QjHT5RVsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwP1Ndp08ArJrqfjdHnwAsmoQL+KBJtAAAAAAAAAAAAAAAAAAAYIsHJxwG/A1QeRMAAAAASUVORK5CYII="
>>> main(src)
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAATUlEQVR4nO3OQQ0AMAgEMJxu/k3AGwWXbK2CVgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAo046wNbpANtNBwAAAH42ANwBv4bl/B8AAAAASUVORK5CYII='
"""
head_b64_str = source_img_b64_str.split(",")[0]
body_b64_str = source_img_b64_str.split(",")[1]
body_b64_bytes = base64.b64decode(body_b64_str)
body_file_like = io.BytesIO(body_b64_bytes)
body_pil_image = Image.open(body_file_like)
resized_body_pil_image = body_pil_image.resize((height, width))
new_img_bytes = io.BytesIO()
resized_body_pil_image.save(new_img_bytes, format="PNG")
new_img_bytes = new_img_bytes.getvalue()
new_body_b64_str = base64.b64encode(new_img_bytes).decode()
return "{},{}".format(head_b64_str, new_body_b64_str)
if __name__ == "__main__":
import doctest
doctest.testmod()