Phil, no sé cuál es la solución que finalmente fue con, pero las imágenes de escala en Java puede verse bastante bien si:
- tipos Evitar BufferedImage que no están bien soportados por el JDK.
- Uso escalado
- Palo incrementales a Bicúbico incrementales cuando se utiliza la escala
que he hecho una parte justa de las pruebas de dichos métodos y la escala gradual a lo largo de con pegarse a los tipos de imagen soportados así es la clave - - Veo que Alexander mencionó que todavía no tuvo buena suerte con eso, lo cual es un fastidio.
Lancé el imgscalr library (Apache 2) hace alrededor de 6 meses para abordar el problema de "Quiero copias a escala bonita de esta imagen, ¡HÁGALO AHORA MISMO!" después de leer algo así como 10 preguntas como esta en SO.
uso estándar se parece a:
BufferedImage img = ImageIO.read(...); // load image
BufferedImage scaledImg = Scalr.resize(img, 640);
El segundo argumento es la anchura y la altura de delimitación imgscalr va a utilizar para escalar la imagen - manteniendo sus proporciones correctas, incluso si usted pasó en las dimensiones no válidas - hay muchos more detailed methods, pero ese es el uso más simple.
El caso de uso que usted quiere, por ejemplo, si Facebook imágenes limitadas a 800x600 píxeles, se vería así:
BufferedImage img = ImageIO.read(...); // load image
BufferedImage scaledImg = Scalr.resize(img, Method.QUALITY, 800, 600);
que asegurará la imagen permanece en el tipo de imagen mejor apoyado y escaló con el método de la más alta calidad que Java puede reunir.
En mi propia prueba de alta resolución no he notado ninguna discrepancia con las imágenes escaladas utilizando esta biblioteca/estos métodos, EXCEPTO cuando el cargador ImageIO pone su imagen en un tipo de imagen poco soportada; por ejemplo, esto sucede mucho con GIFs Si los dejas así y no los sacas de esos tipos poco respaldados, terminan pareciendo muy vacilantes y terribles.
La razón de esto es que el equipo Java2D en realidad tiene diferentes tuberías aceleradas por hardware para todos los tipos de imágenes Buffered que el JDK puede procesar: un subconjunto de esos tipos de imágenes menos comunes recurre al mismo software la realización de tuberías debajo de las cubiertas en Java2D, lo que resulta en imágenes pobres y en ocasiones totalmente incorrectas. Este fue un PIA para explicar y tratar de descubrir que acabo de escribir esa lógica directamente en la biblioteca.
Los dos tipos más compatibles son BufferedImage.TYPE_INT_RGB y _ARGB si tiene curiosidad.
Esperaba evitar una llamada externa, pero creo que puede estar en lo cierto. ¡Java no parece tener el procesamiento de imágenes completo todavía! –
¡Esta es mi conclusión también! ¡Las apis de la imagen de Java simplemente apestan! Puedo evitar la lentitud, ¡pero la mala calidad de imagen no es aceptable! Espero que los apis relevantes obtengan un tcc muy necesario junto con JavaFX 2.0. – Kimble
Es obvio que no has encontrado [java-image-scaling] (http://code.google.com/p/java-image-scaling/). –