Ankur
estoy usando el imgscalr Biblioteca Java para cambiar el tamaño de una imagen.
El resultado de una llamada al método resize() es un objeto BufferedImage. Ahora quiero guardar esto como un archivo (generalmente .jpg).
¿Cómo puedo hacer eso? quiero ir de BufferedImage
-> File
pero tal vez este no es el enfoque correcto?
File outputfile = new File("image.jpg");
ImageIO.write(bufferedImage, "jpg", outputfile);
-
Además, asegúrese de que exista el archivo de salida. Si no es así, write() lanzará (incorrectamente) una NullPointerException
– CodyS
23/10/2014 a las 18:52
-
rodear con un intento/captura.
– Lou Morda
12 de noviembre de 2014 a las 18:57
-
no atrapar
NullPointerException
usarif (outputfile.exists())
– Danón
27 de mayo de 2020 a las 0:01
Kartik Chugh
La respuesta se encuentra dentro de la documentación de Java. Tutorial para Escribir/Guardar una Imagen.
los Image I/O
class proporciona el siguiente método para guardar una imagen:
static boolean ImageIO.write(RenderedImage im, String formatName, File output) throws IOException
El tutorial explica que
La clase BufferedImage implementa la interfaz RenderedImage.
por lo que es capaz de ser utilizado en el método.
Por ejemplo,
try {
BufferedImage bi = getMyImage(); // retrieve image
File outputfile = new File("saved.png");
ImageIO.write(bi, "png", outputfile);
} catch (IOException e) {
// handle exception
}
Es importante rodear write
llamar con un intentar bloquear porque, según la APIel método lanza un IOException
“si ocurre un error durante la escritura”
También se explican el objetivo, los parámetros, los retornos y los lanzamientos del método, con más detalle:
Escribe una imagen utilizando un ImageWriter arbitrario que admite el formato dado en un archivo. Si ya hay un archivo presente, su contenido se descarta.
Parámetros:
im: una imagen renderizada que se va a escribir.
formatName: una cadena que contiene el nombre informal del formato.
salida: un archivo en el que se escribirá.
Devoluciones:
falso si no se encuentra un escritor apropiado.
Lanza:
IllegalArgumentException: si algún parámetro es nulo.
IOException: si se produce un error durante la escritura.
Sin embargo, formatName
todavía puede parecer bastante vago y ambiguo; el tutorial lo aclara un poco:
El método ImageIO.write llama al código que implementa la escritura PNG como un “complemento de escritura PNG”. El término complemento se usa porque Image I/O es extensible y puede admitir una amplia gama de formatos.
Pero los siguientes complementos de formato de imagen estándar: JPEG, PNG, GIF, BMP y WBMP siempre están presentes.
Para la mayoría de las aplicaciones es suficiente usar uno de estos complementos estándar. Tienen la ventaja de estar fácilmente disponibles.
Sin embargo, existen formatos adicionales que puede utilizar:
La clase Image I/O proporciona una forma de conectar la compatibilidad con formatos adicionales que se pueden usar, y existen muchos complementos de este tipo. Si está interesado en qué formatos de archivo están disponibles para cargar o guardar en su sistema, puede usar los métodos getReaderFormatNames y getWriterFormatNames de la clase ImageIO. Estos métodos devuelven una serie de cadenas que enumeran todos los formatos admitidos en este JRE.
String writerNames[] = ImageIO.getWriterFormatNames();
La matriz de nombres devuelta incluirá cualquier complemento adicional que esté instalado y cualquiera de estos nombres se puede usar como un nombre de formato para seleccionar un escritor de imágenes.
Para un ejemplo completo y práctico, uno puede referirse a Oracle’s SaveImage.java
ejemplo.
Raj hábil
Puedes guardar un BufferedImage
objeto usando el método de escritura del javax.imageio.ImageIO
clase. La firma del método es así:
public static boolean write(RenderedImage im, String formatName, File output) throws IOException
Aquí im
es el RenderedImage
para ser escrito, formatName
es la cadena que contiene el nombre informal del formato (por ejemplo, png) y output
es el objeto de archivo en el que se va a escribir. A continuación se muestra un ejemplo de uso del método para el formato de archivo PNG:
ImageIO.write(image, "png", file);
eric leschinski
Cree y guarde una imagen java.awt.image.bufferedImage en el archivo:
import java.io.*;
import java.awt.image.*;
import javax.imageio.*;
public class Main{
public static void main(String args[]){
try{
BufferedImage img = new BufferedImage(
500, 500, BufferedImage.TYPE_INT_RGB );
File f = new File("MyFile.png");
int r = 5;
int g = 25;
int b = 255;
int col = (r << 16) | (g << 8) | b;
for(int x = 0; x < 500; x++){
for(int y = 20; y < 300; y++){
img.setRGB(x, y, col);
}
}
ImageIO.write(img, "PNG", f);
}
catch(Exception e){
e.printStackTrace();
}
}
}
Notas:
- Crea un archivo llamado MyFile.png.
- La imagen es de 500 por 500 píxeles.
- Sobrescribe el archivo existente.
- El color de la imagen es negro con una franja azul en la parte superior.
Zona
- Descargar y agregar imgscalr-lib-xxjar y imgscalr-lib-xx-javadoc.jar a sus Bibliotecas de Proyectos.
-
En tu código:
import static org.imgscalr.Scalr.*; public static BufferedImage resizeBufferedImage(BufferedImage image, Scalr.Method scalrMethod, Scalr.Mode scalrMode, int width, int height) { BufferedImage bi = image; bi = resize( image, scalrMethod, scalrMode, width, height); return bi; } // Save image: ImageIO.write(Scalr.resize(etotBImage, 150), "jpg", new File(myDir));
eric leschinski
Como una sola línea:
ImageIO.write(Scalr.resize(ImageIO.read(...), 150));