¿Cuál es la técnica / algoritmo utilizado por mensajeros como WhatsApp y BBM para comprimir imágenes?

Basándose en la respuesta del usuario de Quora, Whatsapp convierte la mayoría de las imágenes a JPEG antes de la transmisión, y utiliza la compresión con pérdida para reducir en gran medida el tamaño.

Esto funciona bien bajo el supuesto de que la mayoría de las imágenes son fotografías / imágenes de cámara y tienen un rango de color dinámico, donde el ojo humano no notará fragmentos de información faltante (vea el enlace a continuación). Las imágenes que se adaptan a esta descripción pueden reducirse de 3 MB (resolución de 8 MP) a 70 KB.

Whatsapp lee la resolución de entrada de la imagen y reduce su tamaño a un ancho de 800 px (altura determinada por la relación de aspecto). Se mantienen las imágenes cuyo ancho de base es menor que 800px.

El resultado final es que casi ninguna imagen transmitida con Whatsapp tiene un tamaño superior a 90 KB ( verificado con un explorador de raíz en Android y sumergiéndose en la carpeta de datos de Whatsapp). Supongo que BBM hace algo similar.

PD: hice el análisis hace un tiempo tratando de implementar algo similar para una aplicación de Android.

Fuente: Mejora de la compresión de imágenes: lo que hemos aprendido de Whatsapp
Comparación extremadamente útil: imagen – PNG vs. GIF vs. JPEG – ¿Cuándo es mejor usar? – Desbordamiento de pila

Las imágenes que se envían se comprimen automáticamente y los algoritmos más utilizados para comprimir imágenes son sin pérdida y con pérdida.

La pérdida menor en general es la mejor en términos de calidad, ya que comprime las imágenes y reduce un espacio considerable, y restaura la imagen perfectamente al original cuando se restaura. (en un sentido sin pérdida significa su nombre).

Por otro lado, las imágenes con pérdida de compresión se extienden en mayor medida (tamaño pequeño y, en consecuencia, mayor ahorro de espacio), pero la restauración no es tan perfecta. (Ver imagen a continuación).

Descripción general de lo que es la compresión sin pérdida y con pérdida:

La compresión sin pérdida y con pérdida son términos que describen si, en la compresión de un archivo, todos los datos originales se pueden recuperar cuando el archivo se descomprime o no. Con una compresión sin pérdidas, cada bit de datos que originalmente estaba en el archivo permanece después de que el archivo se descomprime. Toda la información está completamente restaurada. Esta es generalmente la técnica de elección para archivos de texto u hojas de cálculo, donde perder palabras o datos financieros podría plantear un problema. El archivo de intercambio de gráficos (GIF) es un formato de imagen utilizado en la Web que proporciona compresión sin pérdidas.

Por otro lado, la compresión con pérdida reduce un archivo al eliminar permanentemente cierta información, especialmente información redundante. Cuando el archivo está descomprimido, solo una parte de la información original todavía está allí (aunque el usuario puede no notarlo). La compresión con pérdida se usa generalmente para video y sonido, donde la mayoría de los usuarios no detectarán una cierta cantidad de pérdida de información. El archivo de imagen JPEG, comúnmente utilizado para fotografías y otras imágenes fijas complejas en la Web, es una imagen que tiene compresión con pérdida. Usando la compresión JPEG, el creador puede decidir cuánta pérdida introducir y hacer una compensación entre el tamaño del archivo y la calidad de la imagen. [1]

Lossless y Lossy manejan diferentes formatos y técnicas ligeramente diferentes al manejar la compresión.

¿Cómo maneja WhatsApp la compresión de imágenes y por qué?

WhatsApp convierte (y comprime) la mayoría de las imágenes a formato jpeg y aprovecha las capacidades de compresión de Lossy para reducir el tamaño de la imagen y hacerla más liviana.

En la mayoría de los casos, la estrategia de WhatsApp en la compresión de imágenes funciona bien, ya que la mayoría de las veces los archivos de imagen que se envían en WhatsApp son imágenes de la cámara y tienen un rango de color dinámico, lo que significa que no podremos ver esos fragmentos de información faltante claramente como estamos más preocupado por la conexión personal con las fotos enviadas a / por nosotros.

Notas al pie

[1] ¿Qué es la compresión sin pérdida y con pérdida? – Definición de WhatIs.com

Además de las respuestas anteriores,

Whatsapp y probablemente otros servicios de mensajería (UTILIZA compresión de IMAGEN JPEG – EN IOS – UIImage Class Reference Algo similar en ANDROID también – CÓDIGO de enlace de muestra a continuación) convierte la imagen

  1. (A.SCALING) resolución a 800X600 (se mantiene la relación de aspecto de 4: 3). Por ejemplo, si una imagen es 1280X768, se reduce a 800X600 mientras que las imágenes con menor resolución no se tocan.
  2. (B. COMPRESIÓN) Luego viene la compresión. Cualquier biblioteca JPEG (openJPEG, libjpeg, etc.) admitiría la compresión. Implica los siguientes pasos: (codificador)

1. Transformación de color – RGB a Ycbcr (y – brillo, cb y cr – color).
2. Reduzca los componentes de croma ya que los ojos humanos son menos sensibles al color fino que el brillo fino. (asegura una mayor compresión)
3.La imagen (Y, cb, cr) se divide en bloques de 8X8 y se somete a DCT
4.Cuantificación: redondeo (esta matriz controla la relación de compresión). El tamaño del archivo se reduce drásticamente si la relación de compresión es mayor y, por lo tanto, la calidad de la imagen se reduce. (MUESTRA JPEG)
5. Codificación de Huffman.
Decodificador: involucra todos los pasos anteriores en el orden inverso, excepto la cuantización, ya que es irreversible (por lo tanto, jpeg es la técnica de compresión con pérdida).

Volviendo a los servicios de mensajería, a través de la compresión de imágenes, logran una reducción en el tamaño del archivo 1280 × 1024 (153 KB) a 800 × 640 (84 KB) con cuantificación del 50%.

Fuentes:
Código C: akshay1188 / whatsapp-image-compresión
Codificador / decodificador JPEG: JPEG

Hay dos tipos de algoritmos de compresión de imágenes.
Sin pérdida y con pérdida

Los formatos sin pérdida más conocidos son:

  • PNG – Utiliza compresión zip como
  • RLE: utiliza una codificación de longitud de ejecución simple, muy rápida
  • GIF: utiliza LZW, limitado a 256 colores, pero hay trucos para obtener gifs de color de 24 bits
  • JBIG y varios algoritmos para imágenes de 2 colores como faxes
  • TIFF: admite varios algoritmos de compresión

Los que pierden:

  • JPEG
  • JPEG2000
  • WEBP
  • DJVU

Estos usan transformaciones FFT o wavelet para dividir la imagen en varias frecuencias y luego descartar información de alta frecuencia que es irrelevante para el ojo humano.

Lo más probable es que las aplicaciones de teléfonos móviles usen JPEG o PNG, ya que son muy compatibles.

Información impresionante proporcionada anteriormente, es realmente útil.

Estoy buscando un sitio web donde pueda subir más de una imagen a la vez y comprimirlas. Solía ​​usar Comprimir imagen: archivos, fotos, imágenes, JPEG, en línea, pero comprime solo una imagen a la vez. la calidad es máxima pero necesito comprimir todas las imágenes a la vez, no una por una. Por favor recomiende.