reducir peso imagen

Hola

Quiero coger muchas imágenes en formato jpg y reducir su peso, no cambiar el tamaño de la imagen. El formato de salida me da lo mismo, pero claro, cuanta mayor calidad mejor.
La API de Java no aporta nada en las clases Writer del paquete imageio (o similar).
¿Alguna idea de cómo hacerlo?

Muchas gracias.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de SuperSerch

Compresión con perdida

JPG es un formato de compresión de imágenes que tiene pérdidas, entonces, para la calidad que muestra, es posiblemente el menor tamaño, la única forma de reducirlo es bajando la calidad como se ve en esta imagen de la wikipedia:

Esta imagen es un PNG pero se usa para ilustrar como los algoritmos de rastreo con compresión con pérdida funcionan.

Imagen de javatlacati

JPEG es el rey en compresión de imágenes

Desde su última versión, el JPEG 2000 es el formato que académicamente está mejor sustentado para tener todo tipo de mejoras y optimizaciónes en compresión de imágenes, es un codec propietario y no te sabría decir mucho de la calidad de las implementaciones alternativas de programas de compresión compilantes con este formato, pero si te puedo platicar de algunas técnicas de representación de imágenes.

Una técnica es representar la imágen en vez de como un arreglo de bits, si bien en este formato es muy fácil leerlo y cargarlo a memoria las imágenes son muy pesadas, el formato más conocido de este tipo es el bmp, normalmente guardan una arreglo por cada color.

Otra técnica prometedora es guardar las imágenes mediante vectores, como es el caso de los svg, desafortunadamente los algoritmos actuales no están tan avanazdos como para convertir imágenes rasterizadas de alta definición en un grupo de vectores.

Una técnica que he usado es la compresión relacional difusa, y aunque creo que no existe ningún códec a la fecha, se trata de multiplicar la imágen por una función matemática que se almacena en un arreglo y representa nuestro conjunto de ecuaciones relacionales difusas.
El algorit consiste en mediante operaciones de multiplicación directa obtener una imágen solución a un conjunto de ecuaciones relacionales difusas que nos produzcan una versión de la imágen con un cambio semántico (independientemente de que tan cuantificable sea y que tanto parecido haya o no con los datos originales), dicha operación es reversible.

La mejor matriz realizada hasta donde sé es una a base de campanas gausianas traslapadas pero su desempeño no ha sido mejor que el de JPEG en compresión.

El hecho relevante a tu pregunta es que como permite el proceso inverso, de una imagen comprimida con su algoritmo te da una versión de tu imágen original con las mismas dimensiones que se ve prácticamente igual, pero no tiene los mismos datos, es decir forma parte del espacio de soluciones aceptable para un ojo humano de decir que la imágen es igual, aunque algunos bits cambien. Si deseas realizar investigación e invertirle tiempo, seguramente hallarás matrices de multiplicación prometedoras que te den esa relación que estás buscando y que semánticamente denominas "con menos peso pero mismo tamaño".

Saludos.