After some analyze on a lot of customer databases, seems like most of the time their are performance probleme, and big store, it is due to a lot of big file uploaded without reason. E.g. barcode, photo, ... a small one will be enough. Now, we decided (in stable) to auto resize these pictures to 1920x1920px by default and compress it with a quality of 80 when the source is bigger. You can bypass this behaviour in your specific use case, using a context key: 'image_no_postprocess' set to True. You can disable the resize (and quality implicitely) using an icp: 'base.image_autoresize_max_px' set to '0'. You can change the default resize (1920x1920) format using an icp: 'base.image_autoresize_max_px' set to '<width>x<height>' (e.g. '1024x768') You can change the default quality (80) using an icp: 'base.image_autoresize_quality' with a value between 0 and 100 where 0 skip it. You can change the type of file that will be post process using icp: 'base.image_autoresize_extensions' (subtype of the mimetype comma separated). Api of image has not be changed in this commit, only refactored to allow to work with image directly without the need to encode/Decode in base64 the raw. We decide to keep 1920x1920 by default instead of 1080p to avoid to resize portrait picture in 1080px and stay consistent with field image_1920 that return a 1920px image for width or height whatever the orientation. + fix some lint diff for ci style in master closes odoo/odoo#78556 X-original-commit: d9ce0507960f247e1187baf7bd8399f90be237aa Signed-off-by: Jérémy Kersten (jke) <jke@openerp.com>
47 lines
1.9 KiB
Python
47 lines
1.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
|
|
from PIL import Image
|
|
|
|
from odoo import api, fields, models
|
|
from odoo.exceptions import ValidationError
|
|
from odoo.tools import ImageProcess
|
|
from odoo.tools.translate import _
|
|
|
|
|
|
class Website(models.Model):
|
|
_inherit = "website"
|
|
|
|
app_icon = fields.Image(string='Website App Icon', compute='_compute_app_icon', store=True, readonly=True, help='This field holds the image used as mobile app icon on the website (PNG format).')
|
|
events_app_name = fields.Char(string='Events App Name', compute='_compute_events_app_name', store=True, readonly=False, help="This fields holds the Event's Progressive Web App name.")
|
|
|
|
@api.depends('name')
|
|
def _compute_events_app_name(self):
|
|
for website in self:
|
|
if not website.events_app_name:
|
|
website.events_app_name = _('%s Events') % website.name
|
|
|
|
@api.constrains('events_app_name')
|
|
def _check_events_app_name(self):
|
|
for website in self:
|
|
if not website.events_app_name:
|
|
raise ValidationError(_('"Events App Name" field is required.'))
|
|
|
|
@api.depends('favicon')
|
|
def _compute_app_icon(self):
|
|
""" Computes a squared image based on the favicon to be used as mobile webapp icon.
|
|
App Icon should be in PNG format and size of at least 512x512.
|
|
"""
|
|
for website in self:
|
|
if not website.favicon:
|
|
website.app_icon = False
|
|
continue
|
|
image = ImageProcess(website.favicon)
|
|
w, h = image.image.size
|
|
square_size = w if w > h else h
|
|
image.crop_resize(square_size, square_size)
|
|
image.image = image.image.resize((512, 512))
|
|
image.operationsCount += 1
|
|
website.app_icon = image.image_quality_base64(output_format='PNG')
|