tamaño reducir manipulacion imagenes imagen agrandar python django lossless-compression

reducir - python tamaño imagen



Compresión sin pérdida de imágenes en django. (3)

Estoy haciendo la optimización y Google recomienda la compresión sin pérdida para las imágenes, buscando una manera de implementar esto en Django.

Aquí están las imágenes que especificaron. Creo que para que se haga de manera efectiva, se debe implementar en todo el sistema, posiblemente utilizando una clase de middleware que se pregunte si alguien lo ha hecho antes. Aquí está el enlace a Google Analytics para pagespeed https://developers.google.com/speed/pagespeed/insights/?url=www.kenyabuzz.com

Optimizar imágenes El formato y la compresión correctos de las imágenes pueden ahorrar muchos bytes de datos. Optimice las siguientes imágenes para reducir su tamaño en 627.3 KB (reducción del 74%).

Losslessly compressing http://www.kenyabuzz.com/media/uploads/clients/kenya_buzz_2.jpg could save 594.3KiB (92% reduction). Losslessly compressing http://www.kenyabuzz.com/media/uploads/clients/new_tribe_2.jpg could save 25KiB (44% reduction). Losslessly compressing http://www.kenyabuzz.com/…a/uploads/clients/EthiopianAirlines2.jpg could save 3KiB (22% reduction). Losslessly compressing http://www.kenyabuzz.com/static/kb/images/Nightlife.Homepage.jpg could save 1.3KiB (2% reduction). Losslessly compressing http://www.kenyabuzz.com/static/kb/img/social/blog.png could save 1.1KiB (43% reduction). Losslessly compressing http://www.kenyabuzz.com/static/kb/img/social/twitter.png could save 969B (52% reduction). Losslessly compressing http://www.kenyabuzz.com/…der-Board---Email-Signature--Neutral.jpg could save 920B (2% reduction). Losslessly compressing http://www.kenyabuzz.com/static/kb/img/social/youtube.png could save 757B (31% reduction).


La compresión sin pérdida de http://www.kenyabuzz.com/media/uploads/clients/kenya_buzz_2.jpg podría ahorrar 594.3 KB (reducción del 92%).

En primer lugar, la información en los registros es bastante engañosa porque es imposible comprimir las imágenes en un 92% usando un formato sin pérdida (excepto en algunos casos como imágenes de un solo color, formas geométricas básicas como cuadrados, etc.). Lea esta respuesta y esta respuesta para más información. Realmente, sí las lees, ambas son excelentes respuestas.

En segundo lugar, puede utilizar formatos de compresión con pérdida "sin perder calidad" ; las diferencias son tan sutiles que el ojo humano ni siquiera se da cuenta.

Entonces, descargué una imagen del sitio web que está optimizando desde este enlace: http://www.kenyabuzz.com/media/uploads/clients/kenya_buzz_2.jpg

Abrí mi consola Python y escribí esto:

>>> from PIL import Image >>> # Open the image >>> im = Image.open("kenya_buzz_2.jpg") >>> # Now save it >>> im.save("kenya_buzz_compressed.jpg", format="JPEG", quality=70)

Esto creó una nueva imagen en mi disco. A continuación se muestran las dos imágenes.

Original (655.3kB)

Comprimido (22.4kB ~ 96% de reducción @ calidad = 70)

Puedes jugar con la opción de quality . Como, el valor de 80 le dará una imagen de mejor calidad pero con un tamaño un poco más grande.

Compresión de imágenes en Django.

Como esta es una pregunta bastante popular, he decidido agregar un código de muestra para comprimir imágenes en Django.

Este código funciona para Django> = 1.7.

from io import BytesIO from PIL import Image from django.core.files import File def compress(image): im = Image.open(image) # create a BytesIO object im_io = BytesIO() # save image to BytesIO object im.save(im_io, ''JPEG'', quality=70) # create a django-friendly Files object new_image = File(im_io, name=image.name) return new_image

Y así es como puede usar la función de compress anterior en su modelo de Django (o en cualquier lugar):

# models.py class MyModel(...): image = models.ImageField(...) def save(self, *args, **kwargs): # call the compress function new_image = compress(self.image) # set self.image to new_image self.image = new_image # save super().save(*args, **kwargs)

Eso es básicamente eso. Este es un código bastante básico. Puede mejorar el código al comprimir la imagen solo cuando la imagen cambia, no cada vez que se guarda el modelo.


Debería probar la aplicación Django Easy Thumbnails , tiene algunas opciones para agregar un posprocesamiento para optimizar las imágenes cargadas: documentación del postprocesador

Lo uso en producción en varios proyectos. Funciona bien, el tamaño de la imagen es definitivamente más pequeño y la carga de la página es mucho más rápida .


No tengo experiencia con eso, sin embargo, picopt parece comprensivo. Se basa ampliamente en herramientas externas para realizar la optimización, por lo que puede ser difícil de configurar en entornos de servidor restringidos o alojados.

Aparte de eso, intente googlear "optimización de imagen de Python". Hay algunos otros enlaces que sugieren que una solución basada en PIL podría ser posible, por ejemplo:

  1. Cómo reducir el tamaño del archivo de imagen usando PIL
  2. Optimización de la imagen (Google App Engine con Python)