[FIX] web_editor: convert color opacity to be compatible with PIL Image color
ValueError 'unknown colour specifier' occurs when we access export_icon_to_png(). This error occurs when we change the colour of an icon in the mailing template, because the value of alpha (opacity) in 'rgba' is in the range of 0 to 1, but PIL Image support colour opacity range 0 to 255. This commit converts the opacity value range (0 to 1) to a range (0 to 255) compatible with the PIL image library when the colour specifier is 'rgba'. sentry - 3933353285 closes odoo/odoo#121696 X-original-commit: 7e4be89f6c0b2f8b82a207030e8a8cb20d72664f Signed-off-by: David Monjoie (dmo) <dmo@odoo.com>
This commit is contained in:
@@ -13,6 +13,7 @@ from PIL import Image, ImageFont, ImageDraw
|
||||
from lxml import etree
|
||||
from base64 import b64decode, b64encode
|
||||
from datetime import datetime
|
||||
from math import floor
|
||||
|
||||
from odoo.http import request, Response
|
||||
from odoo import http, tools, _, SUPERUSER_ID
|
||||
@@ -112,6 +113,13 @@ class Web_Editor(http.Controller):
|
||||
bg = bg.replace('rgba', 'rgb')
|
||||
bg = ','.join(bg.split(',')[:-1])+')'
|
||||
|
||||
# Convert the opacity value compatible with PIL Image color (0 to 255)
|
||||
# when color specifier is 'rgba'
|
||||
if color is not None and color.startswith('rgba'):
|
||||
*rgb, a = color.strip(')').split(',')
|
||||
opacity = str(floor(float(a) * 255))
|
||||
color = ','.join([*rgb, opacity]) + ')'
|
||||
|
||||
# Determine the dimensions of the icon
|
||||
image = Image.new("RGBA", (width, height), color)
|
||||
draw = ImageDraw.Draw(image)
|
||||
|
||||
Reference in New Issue
Block a user