Overslaan naar inhoud
Menu
Je moet geregistreerd zijn om te kunnen communiceren met de community.
Deze vraag is gerapporteerd
1 Beantwoorden
1249 Weergaven



Hello, I would like to know of any effective method that can help me compress the images that are uploaded to the site in a binary field and that they are saved compressed in my database.


Avatar
Annuleer
Beste antwoord

Hi,

Python's 'PIL'(pillow) library can be used to compress images. You can use the following custom method:

from PIL import Image

from io import BytesIO

import base64


def compress_image(image_base64, quality=70):

    # Decode the base64 image

    image_data = base64.b64decode(image_base64)

    # Open image with PIL

    image = Image.open(BytesIO(image_data))

    # Convert to RGB if needed

    if image.mode in ("RGBA", "P"):

        image = image.convert("RGB")

    # Compress the image

    output_io = BytesIO()

    image.save(output_io, format="JPEG", quality=quality)

    # Encode back to base64

    compressed_image_base64 = base64.b64encode(output_io.getvalue()).decode('utf-8')

    return compressed_image_base64


And modify your model’s write and create methods to automatically compress images on save>

from odoo import models, fields, api


class MyModel(models.Model):

_name = 'my.model'


image = fields.Binary("Image")


@api.model

def create(self, vals):

if vals.get('image'):

vals['image'] = compress_image(vals['image'])

return super(MyModel, self).create(vals)


def write(self, vals):

if vals.get('image'):

vals['image'] = compress_image(vals['image'])

return super(MyModel, self).write(vals)


Hope it helps


Avatar
Annuleer
Gerelateerde posts Antwoorden Weergaven Activiteit
1
apr. 23
4419
2
okt. 21
3677
1
aug. 21
3112
0
sep. 18
2876
1
okt. 21
6234