From 3e268a5e9db10ad0b800cfe2f87801111eccd7a4 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Tue, 16 Jan 2024 10:05:19 +0700 Subject: Update api image with cache in controller --- indoteknik_api/controllers/controller.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'indoteknik_api/controllers/controller.py') diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index 4d6716b2..85eda235 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -3,7 +3,7 @@ import datetime import base64 import json -from odoo import http +from odoo import http, tools from odoo.http import request from odoo.tools.config import config from pytz import timezone @@ -185,5 +185,12 @@ class Controller(http.Controller): def get_image(self, model, field, id): model = request.env[model].sudo().search([('id', '=', id)], limit=1) image = model[field] if model[field] else '' + request.env['user.activity.log'].record_activity() - return request.make_response(base64.b64decode(image), [('Content-Type', 'image/jpg')]) + + response_headers = [('Content-Type', 'image/jpg'), ('Cache-Control', 'public, max-age=3600')] + + return request.make_response( + base64.b64decode(image), + response_headers + ) -- cgit v1.2.3 From 24b383b580ae039d66e06a9b20b000b19f833033 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Mon, 22 Jan 2024 14:46:13 +0700 Subject: Add watermark in api get image --- indoteknik_api/controllers/controller.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'indoteknik_api/controllers/controller.py') diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index 85eda235..7278ec23 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -7,8 +7,10 @@ from odoo import http, tools from odoo.http import request from odoo.tools.config import config from pytz import timezone +from PIL import Image, ImageDraw, ImageFont import jwt import functools +import io class Controller(http.Controller): @@ -182,11 +184,26 @@ class Controller(http.Controller): return self.response(address) @http.route('/api/image///', auth='public', methods=['GET']) - def get_image(self, model, field, id): + def get_image(self, model, field, id, **kw): + watermark = kw.get('watermark', '') model = request.env[model].sudo().search([('id', '=', id)], limit=1) image = model[field] if model[field] else '' - request.env['user.activity.log'].record_activity() + if watermark.lower() == 'true': + img_data = io.BytesIO(base64.b64decode(image)) + img = Image.open(img_data) + + img_width, img_height = img.size + font_size = int(min(img_width, img_height) * 0.04) + font = ImageFont.truetype("arial.ttf", font_size) + + img = img.convert('RGBA') + draw = ImageDraw.Draw(img) + draw.text((10, 10), 'Indoteknik.com', fill=(0, 0, 0, 100), font=font) + + buffered = io.BytesIO() + img.save(buffered, format="PNG") + image = base64.b64encode(buffered.getvalue()).decode('utf-8') response_headers = [('Content-Type', 'image/jpg'), ('Cache-Control', 'public, max-age=3600')] -- cgit v1.2.3 From 5ed6910d689197416d0c87d269dd8362c079b831 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Mon, 22 Jan 2024 15:04:05 +0700 Subject: Add font in indoteknik_api --- indoteknik_api/controllers/controller.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'indoteknik_api/controllers/controller.py') diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index 7278ec23..95b7d838 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -6,6 +6,7 @@ import json from odoo import http, tools from odoo.http import request from odoo.tools.config import config +from odoo.modules import get_module_resource from pytz import timezone from PIL import Image, ImageDraw, ImageFont import jwt @@ -195,7 +196,8 @@ class Controller(http.Controller): img_width, img_height = img.size font_size = int(min(img_width, img_height) * 0.04) - font = ImageFont.truetype("arial.ttf", font_size) + font_path = get_module_resource('indoteknik_api', 'static', 'src', 'fonts', 'Inter.ttf') + font = ImageFont.truetype(font_path, font_size) img = img.convert('RGBA') draw = ImageDraw.Draw(img) -- cgit v1.2.3 From 50dfe6d8fa94b784c9cf62fcc6611131170c17e2 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Tue, 23 Jan 2024 10:08:26 +0700 Subject: Add watermark on image api --- indoteknik_api/controllers/controller.py | 42 +++++++++++++++++++------------- 1 file changed, 25 insertions(+), 17 deletions(-) (limited to 'indoteknik_api/controllers/controller.py') diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index 95b7d838..36f5aa9b 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -186,30 +186,38 @@ class Controller(http.Controller): @http.route('/api/image///', auth='public', methods=['GET']) def get_image(self, model, field, id, **kw): - watermark = kw.get('watermark', '') model = request.env[model].sudo().search([('id', '=', id)], limit=1) image = model[field] if model[field] else '' + watermark = kw.get('watermark', '') if watermark.lower() == 'true': - img_data = io.BytesIO(base64.b64decode(image)) - img = Image.open(img_data) - - img_width, img_height = img.size - font_size = int(min(img_width, img_height) * 0.04) - font_path = get_module_resource('indoteknik_api', 'static', 'src', 'fonts', 'Inter.ttf') - font = ImageFont.truetype(font_path, font_size) - - img = img.convert('RGBA') - draw = ImageDraw.Draw(img) - draw.text((10, 10), 'Indoteknik.com', fill=(0, 0, 0, 100), font=font) - - buffered = io.BytesIO() - img.save(buffered, format="PNG") - image = base64.b64encode(buffered.getvalue()).decode('utf-8') + image = self.add_watermark_to_image(image) - response_headers = [('Content-Type', 'image/jpg'), ('Cache-Control', 'public, max-age=3600')] + response_headers = [ + ('Content-Type', 'image/jpg'), + ('Cache-Control', 'public, max-age=3600') + ] return request.make_response( base64.b64decode(image), response_headers ) + + def add_watermark_to_image(self, image): + logo_path = get_module_resource('indoteknik_api', 'static', 'src', 'images', 'logo-indoteknik.png') + logo_img = Image.open(logo_path) + logo_img = logo_img.convert('RGBA') + + img_data = io.BytesIO(base64.b64decode(image)) + img = Image.open(img_data) + img = img.convert('RGBA') + + img_width, img_height = img.size + logo_img.thumbnail((img_width // 3, img_height // 3)) + + img.paste(logo_img, (20, 15), logo_img) + + buffered = io.BytesIO() + img.save(buffered, format="PNG") + return base64.b64encode(buffered.getvalue()).decode('utf-8') + -- cgit v1.2.3 From 10eaf6d0c0a0ebf02030fe0854ca51f22fd3795e Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Thu, 25 Jan 2024 13:36:02 +0700 Subject: Update image watermark --- indoteknik_api/controllers/controller.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'indoteknik_api/controllers/controller.py') diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index 36f5aa9b..a3fb6fcb 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -213,9 +213,9 @@ class Controller(http.Controller): img = img.convert('RGBA') img_width, img_height = img.size - logo_img.thumbnail((img_width // 3, img_height // 3)) + logo_img.thumbnail((img_width // 2.2, img_height // 2.2)) - img.paste(logo_img, (20, 15), logo_img) + img.paste(logo_img, (12, 10), logo_img) buffered = io.BytesIO() img.save(buffered, format="PNG") -- cgit v1.2.3 From 0afeff9478a7aea67fbf3abed936390571aae788 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Thu, 25 Jan 2024 13:47:05 +0700 Subject: Add model with watermark on image api --- indoteknik_api/controllers/controller.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'indoteknik_api/controllers/controller.py') diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index a3fb6fcb..7ceebbe3 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -186,11 +186,14 @@ class Controller(http.Controller): @http.route('/api/image///', auth='public', methods=['GET']) def get_image(self, model, field, id, **kw): + model_name = model + model = request.env[model].sudo().search([('id', '=', id)], limit=1) image = model[field] if model[field] else '' + model_with_watermark = ['product.template', 'product.product'] watermark = kw.get('watermark', '') - if watermark.lower() == 'true': + if watermark.lower() == 'true' or model_name in model_with_watermark: image = self.add_watermark_to_image(image) response_headers = [ -- cgit v1.2.3 From 19fa8e951da70347d822bb5b0f2acf5563afc704 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Thu, 25 Jan 2024 14:52:15 +0700 Subject: Add square ratio on image api --- indoteknik_api/controllers/controller.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'indoteknik_api/controllers/controller.py') diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index 7ceebbe3..bd763e00 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -194,7 +194,8 @@ class Controller(http.Controller): model_with_watermark = ['product.template', 'product.product'] watermark = kw.get('watermark', '') if watermark.lower() == 'true' or model_name in model_with_watermark: - image = self.add_watermark_to_image(image) + ratio = kw.get('ratio', '') + image = self.add_watermark_to_image(image, ratio) response_headers = [ ('Content-Type', 'image/jpg'), @@ -206,7 +207,7 @@ class Controller(http.Controller): response_headers ) - def add_watermark_to_image(self, image): + def add_watermark_to_image(self, image, ratio): logo_path = get_module_resource('indoteknik_api', 'static', 'src', 'images', 'logo-indoteknik.png') logo_img = Image.open(logo_path) logo_img = logo_img.convert('RGBA') @@ -217,10 +218,23 @@ class Controller(http.Controller): img_width, img_height = img.size logo_img.thumbnail((img_width // 2.2, img_height // 2.2)) + + new_img = img + + if ratio == 'square': + longest_wh = max(img_height, img_width) - img.paste(logo_img, (12, 10), logo_img) + new_img = Image.new('RGBA', (longest_wh, longest_wh), (255, 255, 255, 255)) + + paste_x = (longest_wh - img_width) // 2 + paste_y = (longest_wh - img_height) // 2 + + new_img.paste(img, (paste_x, paste_y), img) + + # Add watermark + new_img.paste(logo_img, (12, 10), logo_img) buffered = io.BytesIO() - img.save(buffered, format="PNG") + new_img.save(buffered, format="PNG") return base64.b64encode(buffered.getvalue()).decode('utf-8') -- cgit v1.2.3 From a08c05d892dc01cad4acaa24c7e1eab16f4a9639 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Mon, 29 Jan 2024 11:53:27 +0700 Subject: Update image watermark --- indoteknik_api/controllers/controller.py | 65 +++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 23 deletions(-) (limited to 'indoteknik_api/controllers/controller.py') diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index bd763e00..fb07708e 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -1,17 +1,17 @@ -from array import array -import datetime import base64 +import datetime +import functools +import io import json +from array import array -from odoo import http, tools +import jwt +from odoo import http from odoo.http import request -from odoo.tools.config import config from odoo.modules import get_module_resource +from odoo.tools.config import config +from PIL import Image from pytz import timezone -from PIL import Image, ImageDraw, ImageFont -import jwt -import functools -import io class Controller(http.Controller): @@ -187,15 +187,14 @@ class Controller(http.Controller): @http.route('/api/image///', auth='public', methods=['GET']) def get_image(self, model, field, id, **kw): model_name = model - model = request.env[model].sudo().search([('id', '=', id)], limit=1) - image = model[field] if model[field] else '' + image = model[field] if field in model else '' - model_with_watermark = ['product.template', 'product.product'] - watermark = kw.get('watermark', '') - if watermark.lower() == 'true' or model_name in model_with_watermark: + if model_name in ['product.template', 'product.product']: + version = '2' if field not in ['image_256', 'image_512', 'image_1024', 'image_1920'] else '1' ratio = kw.get('ratio', '') - image = self.add_watermark_to_image(image, ratio) + image = model['image_512'] or '' + image = self.add_watermark_to_image(image, ratio, version) response_headers = [ ('Content-Type', 'image/jpg'), @@ -207,29 +206,49 @@ class Controller(http.Controller): response_headers ) - def add_watermark_to_image(self, image, ratio): - logo_path = get_module_resource('indoteknik_api', 'static', 'src', 'images', 'logo-indoteknik.png') - logo_img = Image.open(logo_path) - logo_img = logo_img.convert('RGBA') + + def add_watermark_to_image(self, image, ratio, version = '1'): + if not image: return '' + + LOGO_FILENAME = { + '1': 'logo-indoteknik-gray.png', + '2': 'logo-indoteknik.png' + } + + logo_path = get_module_resource('indoteknik_api', 'static', 'src', 'images', LOGO_FILENAME.get(version)) + logo_img = Image.open(logo_path).convert('RGBA') img_data = io.BytesIO(base64.b64decode(image)) - img = Image.open(img_data) - img = img.convert('RGBA') + img = Image.open(img_data).convert('RGBA') img_width, img_height = img.size - logo_img.thumbnail((img_width // 2.2, img_height // 2.2)) + longest_wh = max(img_height, img_width) + + # Resize logo image + logo_img_w = img_width // 2.2 + logo_img_h = img_height // 2.2 new_img = img + if version == '2': + logo__footer_path = get_module_resource('indoteknik_api', 'static', 'src', 'images', 'logo-indoteknik-footer.png') + logo__footer_img = Image.open(logo__footer_path).convert('RGBA') + logo__footer_img.thumbnail((img_width, img_height // 1)) + logo_footer_w, logo_footer_h = logo__footer_img.size + new_img.paste(logo__footer_img, (0, img_height - logo_footer_h), logo__footer_img) + + logo_img_w = img_width // 1.8 + logo_img_h = img_height // 1.8 + if ratio == 'square': - longest_wh = max(img_height, img_width) - new_img = Image.new('RGBA', (longest_wh, longest_wh), (255, 255, 255, 255)) paste_x = (longest_wh - img_width) // 2 paste_y = (longest_wh - img_height) // 2 new_img.paste(img, (paste_x, paste_y), img) + + logo_img.thumbnail((logo_img_w, logo_img_h)) # Add watermark new_img.paste(logo_img, (12, 10), logo_img) -- cgit v1.2.3 From 9c3ba66d67a91a3281f8fcb2c4956f69489600ab Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Mon, 29 Jan 2024 16:04:47 +0700 Subject: Update import setting feature --- 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 fb07708e..bb060cf5 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -191,7 +191,7 @@ class Controller(http.Controller): image = model[field] if field in model else '' if model_name in ['product.template', 'product.product']: - version = '2' if field not in ['image_256', 'image_512', 'image_1024', 'image_1920'] else '1' + version = '1' if field in ['image_256', 'image_512', 'image_1024', 'image_1920'] else '2' ratio = kw.get('ratio', '') image = model['image_512'] or '' image = self.add_watermark_to_image(image, ratio, version) -- cgit v1.2.3 From b2de86fc46f09c14e415181496bee38733d50306 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Tue, 30 Jan 2024 14:11:38 +0700 Subject: update image api source size --- 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 bb060cf5..0592afe1 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -193,7 +193,7 @@ class Controller(http.Controller): if model_name in ['product.template', 'product.product']: version = '1' if field in ['image_256', 'image_512', 'image_1024', 'image_1920'] else '2' ratio = kw.get('ratio', '') - image = model['image_512'] or '' + image = model['image_256'] or '' image = self.add_watermark_to_image(image, ratio, version) response_headers = [ -- cgit v1.2.3 From 8bc43445f1d0b70d54d0a45830e04d0fcc406fbe Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Thu, 1 Feb 2024 15:24:17 +0700 Subject: Fix image watermark API --- indoteknik_api/controllers/controller.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'indoteknik_api/controllers/controller.py') diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index 0592afe1..a362e6a6 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -230,16 +230,6 @@ class Controller(http.Controller): new_img = img - if version == '2': - logo__footer_path = get_module_resource('indoteknik_api', 'static', 'src', 'images', 'logo-indoteknik-footer.png') - logo__footer_img = Image.open(logo__footer_path).convert('RGBA') - logo__footer_img.thumbnail((img_width, img_height // 1)) - logo_footer_w, logo_footer_h = logo__footer_img.size - new_img.paste(logo__footer_img, (0, img_height - logo_footer_h), logo__footer_img) - - logo_img_w = img_width // 1.8 - logo_img_h = img_height // 1.8 - if ratio == 'square': new_img = Image.new('RGBA', (longest_wh, longest_wh), (255, 255, 255, 255)) @@ -247,6 +237,16 @@ class Controller(http.Controller): paste_y = (longest_wh - img_height) // 2 new_img.paste(img, (paste_x, paste_y), img) + + if version == '2': + logo__footer_path = get_module_resource('indoteknik_api', 'static', 'src', 'images', 'logo-indoteknik-footer.png') + logo_footer_img = Image.open(logo__footer_path).convert('RGBA') + logo_footer_img.thumbnail((img_width, img_height // 1)) + logo_footer_w, logo_footer_h = logo_footer_img.size + new_img.paste(logo_footer_img, (0, img_height - logo_footer_h), logo_footer_img) + + logo_img_w = img_width // 1.8 + logo_img_h = img_height // 1.8 logo_img.thumbnail((logo_img_w, logo_img_h)) -- cgit v1.2.3 From 6c0849185975b40039877f80c465a6beb6dead7d Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Tue, 6 Feb 2024 13:13:09 +0700 Subject: Update image watermark --- indoteknik_api/controllers/controller.py | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) (limited to 'indoteknik_api/controllers/controller.py') diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index a362e6a6..9ee56062 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -210,12 +210,7 @@ class Controller(http.Controller): def add_watermark_to_image(self, image, ratio, version = '1'): if not image: return '' - LOGO_FILENAME = { - '1': 'logo-indoteknik-gray.png', - '2': 'logo-indoteknik.png' - } - - logo_path = get_module_resource('indoteknik_api', 'static', 'src', 'images', LOGO_FILENAME.get(version)) + logo_path = get_module_resource('indoteknik_api', 'static', 'src', 'images', 'logo-indoteknik-gray.png') logo_img = Image.open(logo_path).convert('RGBA') img_data = io.BytesIO(base64.b64decode(image)) @@ -243,15 +238,13 @@ class Controller(http.Controller): logo_footer_img = Image.open(logo__footer_path).convert('RGBA') logo_footer_img.thumbnail((img_width, img_height // 1)) logo_footer_w, logo_footer_h = logo_footer_img.size - new_img.paste(logo_footer_img, (0, img_height - logo_footer_h), logo_footer_img) - - logo_img_w = img_width // 1.8 - logo_img_h = img_height // 1.8 + new_img.paste(logo_footer_img, (0, img_height - logo_footer_h - 20), logo_footer_img) logo_img.thumbnail((logo_img_w, logo_img_h)) - # Add watermark - new_img.paste(logo_img, (12, 10), logo_img) + if version == '1': + # Add watermark + new_img.paste(logo_img, (12, 10), logo_img) buffered = io.BytesIO() new_img.save(buffered, format="PNG") -- cgit v1.2.3 From 4de40c41c5f1c7d1221cd177667e6935ea993b71 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Tue, 6 Feb 2024 13:36:16 +0700 Subject: Update variant not apply watermark --- 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 9ee56062..50e86b68 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -190,7 +190,7 @@ class Controller(http.Controller): model = request.env[model].sudo().search([('id', '=', id)], limit=1) image = model[field] if field in model else '' - if model_name in ['product.template', 'product.product']: + if model_name in ['product.template']: version = '1' if field in ['image_256', 'image_512', 'image_1024', 'image_1920'] else '2' ratio = kw.get('ratio', '') image = model['image_256'] or '' -- cgit v1.2.3