From 4d5a0a6e2d997e323f8670172226f613b7673d62 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Thu, 5 Dec 2024 14:47:20 +0700 Subject: convert iamge to webp extension --- indoteknik_api/controllers/controller.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'indoteknik_api/controllers/controller.py') diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index a34a2688..0f20d319 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -4,6 +4,7 @@ import functools import io import json from array import array +from io import BytesIO import jwt from odoo import http @@ -11,6 +12,8 @@ from odoo.http import request from odoo.modules import get_module_resource from odoo.tools.config import config from PIL import Image +from PIL.WebPImagePlugin import Image +from PIL import features from pytz import timezone @@ -204,6 +207,8 @@ class Controller(http.Controller): if not variant: image = self.add_watermark_to_image(image, ratio, version) + image = self.convert_to_webp(image) + response_headers = [ ('Content-Type', 'image/jpg'), ('Cache-Control', 'public, max-age=3600') @@ -214,6 +219,31 @@ class Controller(http.Controller): response_headers ) + def convert_to_webp(self, image_base64): + """Convert image from base64 to WebP format and return base64 WebP.""" + try: + print(f"Image base64 length: {len(image_base64)}") + + # Decode Base64 to Bytes + image_data = base64.b64decode(image_base64) + image = Image.open(BytesIO(image_data)) + + if image.mode in ("RGBA", "P"): # Cek alpha channel atau palet + image = image.convert("RGB") # Konversi ke RGB + + # Convert to WebP + with BytesIO() as output: + image.save(output, format="WEBP", quality=85) + webp_data = output.getvalue() + + # Encode back to Base64 + return base64.b64encode(webp_data).decode('utf-8') + except Exception as e: + print(f"Error details: {e}") + # If conversion fails, return the original image + request.env.cr.rollback() # Rollback any transactions + return image_base64 + def add_watermark_to_image(self, image, ratio, version = '1'): if not image: return '' -- cgit v1.2.3 From 4fa79ffd236f76ace6525b67031f3a3e9af729c1 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Thu, 5 Dec 2024 15:41:43 +0700 Subject: fixing format --- indoteknik_api/controllers/controller.py | 3 --- 1 file changed, 3 deletions(-) (limited to 'indoteknik_api/controllers/controller.py') diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index 0f20d319..26f0e3e4 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -228,9 +228,6 @@ class Controller(http.Controller): image_data = base64.b64decode(image_base64) image = Image.open(BytesIO(image_data)) - if image.mode in ("RGBA", "P"): # Cek alpha channel atau palet - image = image.convert("RGB") # Konversi ke RGB - # Convert to WebP with BytesIO() as output: image.save(output, format="WEBP", quality=85) -- cgit v1.2.3 From 187a5463b08f57f944afd80ee6b8d38047661ca0 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Thu, 5 Dec 2024 15:48:53 +0700 Subject: hold conver to webp --- indoteknik_api/controllers/controller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_api/controllers/controller.py') diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index 26f0e3e4..f777dba8 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -207,7 +207,7 @@ class Controller(http.Controller): if not variant: image = self.add_watermark_to_image(image, ratio, version) - image = self.convert_to_webp(image) + # image = self.convert_to_webp(image) response_headers = [ ('Content-Type', 'image/jpg'), -- cgit v1.2.3 From 4721464cf2cd6d9c331b7ecc3ceaab5a6548b7c9 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 5 Dec 2024 15:54:03 +0700 Subject: fix bug --- indoteknik_api/controllers/controller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_api/controllers/controller.py') diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index f777dba8..b7bf5f71 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -12,7 +12,7 @@ from odoo.http import request from odoo.modules import get_module_resource from odoo.tools.config import config from PIL import Image -from PIL.WebPImagePlugin import Image +# from PIL.WebPImagePlugin import Image from PIL import features from pytz import timezone -- cgit v1.2.3 From 4daa1f70f7f390831c1b64f054f93fe3be81eebe Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Thu, 5 Dec 2024 16:30:30 +0700 Subject: fixing convert image --- indoteknik_api/controllers/controller.py | 3 +++ 1 file changed, 3 insertions(+) (limited to 'indoteknik_api/controllers/controller.py') diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index f777dba8..80f45074 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -228,6 +228,9 @@ class Controller(http.Controller): image_data = base64.b64decode(image_base64) image = Image.open(BytesIO(image_data)) + if image.format == "PNG" and image.mode != "RGBA": + image = image.convert("RGBA") + # Convert to WebP with BytesIO() as output: image.save(output, format="WEBP", quality=85) -- cgit v1.2.3 From 19abaad4eb47443e621108985c0d0dcf2d4c6609 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Thu, 5 Dec 2024 16:32:15 +0700 Subject: ketinggalan --- indoteknik_api/controllers/controller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_api/controllers/controller.py') diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index ebabfd03..7f49c4e5 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -207,7 +207,7 @@ class Controller(http.Controller): if not variant: image = self.add_watermark_to_image(image, ratio, version) - # image = self.convert_to_webp(image) + image = self.convert_to_webp(image) response_headers = [ ('Content-Type', 'image/jpg'), -- cgit v1.2.3 From 16f2140b7ce089cb417acd1093364fd8c6b51513 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Fri, 6 Dec 2024 10:17:23 +0700 Subject: add lib webp --- indoteknik_api/controllers/controller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_api/controllers/controller.py') diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index 7f49c4e5..81cea9ff 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -12,7 +12,7 @@ from odoo.http import request from odoo.modules import get_module_resource from odoo.tools.config import config from PIL import Image -# from PIL.WebPImagePlugin import Image +from PIL.WebPImagePlugin import Image from PIL import features from pytz import timezone -- cgit v1.2.3 From b0e71c613a80283a76371a468d54771b284205b5 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 6 Dec 2024 11:27:03 +0700 Subject: fix bug envio --- indoteknik_api/controllers/controller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_api/controllers/controller.py') diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index 7f49c4e5..ebabfd03 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -207,7 +207,7 @@ class Controller(http.Controller): if not variant: image = self.add_watermark_to_image(image, ratio, version) - image = self.convert_to_webp(image) + # image = self.convert_to_webp(image) response_headers = [ ('Content-Type', 'image/jpg'), -- cgit v1.2.3