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