Me gustaría comprobar las dimensiones de una imagen, y luego dimensionarla si el ancho excede un umbral dado. Cuando cargo una imagen JPEG de 6MB con ImageIO.read(), BufferedImage asigna aproximadamente 45MB de espacio de almacenamiento dinámico. ¿Hay alguna manera de hacer un cambio de tamaño de la imagen sin cargar todos los datos en la memoria? Traté de pasar ImageIO.read() un objeto File, pensando que transmitiría los datos del disco, pero no ayuda.¿Cómo cambiar el tamaño de una imagen sin cargarla en la memoria?
Respuesta
Consulte im4java y JMagick. Ambos usan una herramienta externa extremadamente eficiente llamada ImageMagick para manipulación de imágenes. Im4Java llama a la aplicación de línea de comandos (funciona en un proceso separado) y JMagick la llama dentro del mismo proceso a través de JNI.
Si estoy haciendo una simple manipulación de imágenes (cambio de tamaño, escalado, rotación, etc.), prefiero dejar que ImageMagick lo haga por mí. Será más rápido, más confiable y consumirá menos memoria que cualquier otra que implemente en un período de tiempo similar.
Espero que esto ayude!
Puede usar ImageInfo para verificar el ancho y alto de la imagen sin cargarla en la memoria. No sé de una biblioteca que le permita cambiar el tamaño sin cargar la imagen en la memoria. 45 MB no es tanta memoria realmente. ¿Puedes simplemente aumentar el tamaño de tu pila?
"45 MB no es demasiado" ... depende de su plataforma de destino. – EboMike
¡Escucha, escucha! ¡45 MB no admite interoperabilidad alta y dispositivos con memoria limitada! –
cierto. Si su plataforma de destino no le permite cargar 45 MB, podría considerar realizar escalas de imagen en un servidor por separado. – dennisjtaylor
He usado jmagick antes con excelentes resultados, sin embargo, puede ser difícil hacerlo funcionar en diferentes entornos (colocando los frascos en el lugar correcto, asegurándote de que tienes la construcción correcta de imagemagick, etc.).
Es posible que desee considerar el uso de imgscalr (http://www.thebuzzmedia.com/software/imgscalr-java-image-scaling-library). Es una biblioteca de código abierto de manipulación de imágenes Java disponible bajo la licencia de Apache 2.0. Mucho mucho (mucho ...) más fácil de usar y más rápido que ese horrendo material de Java2D.
- 1. ¿Cómo puedo cambiar el tamaño de una imagen sin estirarla?
- 2. cambiar el tamaño de un UIImage sin cargarlo por completo en la memoria?
- 3. Obtenga el tamaño de una imagen sin cargarla, desde un servidor web
- 4. Girar imagen * sin * cambiar el tamaño
- 5. Cambiar el tamaño de una imagen en asp.net sin perder la calidad de imagen
- 6. ¿Cómo cambiar el tamaño de la imagen original en un tamaño de imagen común en Java?
- 7. Cómo cambiar el tamaño de imagen UIBarButtonItem
- 8. ckfinder cambiar el tamaño de la imagen
- 9. ¿Cómo cambiar el tamaño de la imagen en Android?
- 10. UIImageView: ¿Cambiar el tamaño al tamaño de la imagen?
- 11. Cambiar el tamaño de una imagen en el balanceo
- 12. Cambiar el tamaño de la imagen JPEG al tamaño especificado
- 13. cómo cambiar el estado de rotación del archivo de imagen sin cargarlo en la memoria
- 14. La imagen no se carga desde la memoria caché después de cargarla en un iframe
- 15. ¿Cómo puedo cambiar el tamaño de una imagen usando Java?
- 16. pyCairo: ¿Cómo cambiar el tamaño y posicionar una imagen?
- 17. Blackberry: cómo cambiar el tamaño de la imagen?
- 18. Cambiar el tamaño de la imagen original en Paperclip
- 19. ¿Cómo cambiar el tamaño y dibujar una imagen usando wxpython?
- 20. ¿Cómo podría cambiar la ubicación de la ventana sin volver a cargarla y # hackear?
- 21. Cambiar el tamaño de la imagen en Core Graphics
- 22. Cambiar el modo de tamaño de una imagen de fondo en el cuadro de imagen
- 23. ¿Cómo cambiar el tamaño de una imagen en C# a un cierto tamaño de disco duro?
- 24. Obtener tamaño de imagen real, después de cambiar el tamaño
- 25. Cambiar el tamaño de una imagen con Paperclip
- 26. Vista previa de la imagen antes de cargarla en IE9
- 27. ¿Cambiar el tamaño de la imagen con django?
- 28. Cambiar el tamaño de la imagen de mapa de bits
- 29. cambiar el tamaño de la imagen al guardar
- 30. cambiar el tamaño y recortar la imagen centrada
Gracias Ben. Veré las bibliotecas de ImageMagick para Java. –
De acuerdo con Ben; si la alta eficiencia es la forma en que necesita ir, usar una solución nativa y llamar a Java es probablemente la única manera en que esto sucederá. Cambiar el tamaño de las imágenes es en realidad una operación de remuestreo; no puedes evitarlo El remuestreo requiere una selección de algoritmo de reducción y promediar los valores de píxel; Hacer esto en "fragmentos" en Java requerirá MUCHO código personalizado en la parte superior de ImageReadParam tirando en secciones a la vez, muestreándolos y combinando los resultados de manera eficiente. En resumen, * chupa *. –
¡Gracias, Riyad! :-) –