¿Podemos cambiar el tamaño de una imagen JPEG sin decodificarla y volver a codificarla?

¿Podemos cambiar el tamaño de una imagen JPEG sin decodificarla y volver a codificarla?

Quiero convertir una imagen JPEG de 640x480 a 320x240. Sé que se puede hacer decodificando la imagen JPEG en YCbCr sin formato, escale y vuelva a codificarla en JPEG. Pero, ¿es posible con la codificación JPEG escalar directamente la imagen sin decodificarla?

Respuesta1

Puede hacerlo, pero sólo si su visor JPEG admite laEscala inteligenteExtensión JPEG.jpegtranPuede hacer esto para tamaños de N/8, con N=1..16. Básicamente, el tamaño del bloque DCT se cambia de 8x8 a otro durante la recompresión (por ejemplo, 4x4), lo que efectivamente escala la imagen.

Nota: SmartScale se introdujo enversión 8de la biblioteca libjpeg, pero los espectadores no lo admiten ampliamente.

Puede encontrar un documento que describe los cambios en detalle aquí:Evolución de JPEG.

EDITAR:Parece que la mayoría de los espectadores no pueden mostrar estas imágenes, ya que están basadas en libjpeg-turbo. Y libjpeg-turbodecidió no implementar esta característica. De hecho, probé bastantes programas (en Ubuntu 14.04 y Windows 8) y ninguno pudo mostrar la imagen reducida creada con jpegtrans. Incluso Photoshop, IrfanView y GIMP fallaron.

EDITAR 2:De hecho, Ubuntu y Fedora ni siquiera incluyen la biblioteca libjpeg8, sino que la reemplazan por completo con la versión libjpeg-turbo. Por lo tanto, ninguno de los programas podrá leer archivos JPEG SmartScale, salvo algunos binarios que están vinculados estáticamente a la biblioteca libjpeg8 original.

Respuesta2

La respuesta corta es no. Una imagen JPEG utiliza compresión, lo que significa que cada byte de salida depende de todos los demás. Si cambia la cantidad de bytes de imagen, deberá descomprimir y recomprimir.

Habrá una pérdida de calidad como resultado de la recompresión, ya que JPEG usa compresión con pérdida, pero de todos modos se pierde calidad al reducir a un cuarto la resolución. Puede obtener la mejor calidad posible de la imagen de baja resolución aumentando el nivel de calidad JPEG al recomprimir, aunque esto, por supuesto, aumentará el tamaño del archivo.

Si trabaja mucho con imágenes, es mejor trabajar en un formato de compresión sin pérdidas, como PNG, y convertir a JPEG sólo cuando las imágenes estén finalizadas, siempre y cuando, por supuesto, tenga espacio adicional en el disco.

información relacionada