Estoy usando el imgscalr biblioteca de Java para cambiar el tamaño de una imagen .

El resultado de un cambio de tamaño() llamada al método de un objeto BufferedImage. Ahora quiero que se guarde como un archivo (por lo general .jpg).

¿Cómo puedo hacer eso? Quiero ir de BufferedImage -> File, pero tal vez este no es el enfoque correcto?

InformationsquelleAutor Ankur | 2012-10-01

6 Comentarios

  1. 205
    File outputfile = new File("image.jpg");
    ImageIO.write(bufferedImage, "jpg", outputfile);
    • El código podría sobrescribir la imagen original.
    • También, asegúrese de que outputfile existe. Si no, escribir() le (incorrectamente) lanzar un NullPointerException
    • rodear con un try/catch.
  2. 21

    Puede guardar un BufferedImage objeto utilizando el método de la escritura de la javax.imageio.ImageIO clase. La firma del método es similar a este:

    public static boolean write(RenderedImage im, String formatName, File output) throws IOException

    Aquí im es el RenderedImage a ser escrito, formatName es la Cadena que contiene el nombre informal del formato (por ejemplo, png) y output es el archivo objeto para ser escritos. Un ejemplo de uso del método para el formato de archivo PNG se muestra a continuación:

    ImageIO.write(image, "png", file);
  3. 10

    La respuesta se encuentra dentro de la Documentación de Java del Tutorial para Escribir/Guardar una Imagen.

    La Image I/O clase proporciona el método siguiente para guardar una imagen:

    static boolean ImageIO.write(RenderedImage im, String formatName, File output)  throws IOException

    El tutorial explica que

    El BufferedImage clase implementa la RenderedImage interfaz.

    por lo que es capaz de ser usado 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 para rodear el write llamada con un bloque try porque, como por la API, el método produce una IOException «si se produce un error durante la escritura de»

    También se explicó el método del objetivo, los parámetros, devuelve, y a los tiros, en más detalle:

    Escribe una imagen mediante una arbitraria ImageWriter que soporta el formato a un Archivo. Si ya existe un Archivo en el presente, su contenido se descartan.

    Parámetros:

    im – un RenderedImage a ser escrito.

    formatName – una Cadena que contiene el nombre informal del formato.

    salida a un Archivo para ser escrito.

    Devuelve:

    false si no existe un escritor que se encuentra.

    Lanza:

    IllegalArgumentException – si algún parámetro es null.

    IOException si ocurre un error durante la escritura.

    Sin embargo, formatName todavía puede parecer bastante vago y ambiguo; el tutorial se aclara un poco:

    La ImageIO.método de la escritura llama el código que implementa PNG escribir un «PNG escritor plug-in». El término plug-in se utiliza ya que la Imagen de e/S es extensible y se puede apoyar una amplia gama de formatos.

    Pero el siguiente formato de imagen estándar de los plugins : JPEG, PNG, GIF, BMP y WBMP están siempre presentes.

    Para la mayoría de las aplicaciones es suficiente con usar uno de estos plugins estándar. Tienen la ventaja de ser fácilmente disponibles.

    Hay, sin embargo, otros formatos que puede utilizar:

    La Imagen de e/S de la clase proporciona una forma para conectar el soporte para formatos adicionales que pueden ser utilizados, y muchos de esos plugins que existen. Si usted está interesado en lo que los formatos de archivo disponibles para cargar o guardar en su sistema, usted puede usar la getReaderFormatNames y getWriterFormatNames métodos de la ImageIO clase. Estos métodos devuelven un array de cadenas de caracteres de la lista de todos los formatos soportados en esta versión de JRE.

    String writerNames[] = ImageIO.getWriterFormatNames();

    La matriz devuelta de los nombres de incluir cualquier otro de los plugins que se instalan y cualquiera de estos nombres puede ser utilizado como un nombre de formato para seleccionar una imagen de escritor.

    Para una completa y práctica ejemplo, uno puede referirse a la de Oracle SaveImage.java ejemplo.

  4. 9

    Crear y guardar un java.awt.imagen.bufferedImage de 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:

    1. Crea un archivo llamado Miarchivo.png.
    2. Imagen es de 500 por 500 píxeles.
    3. Sobrescribe el archivo existente.
    4. El color de la imagen es de color negro con una franja azul en la parte superior.
  5. 1
    1. Descargar y agregar imgscalr-lib-x.x.jar y imgscalr-lib-x.x-javadoc.jar a los Proyectos de las Bibliotecas.
    2. En el 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));

Dejar respuesta

Please enter your comment!
Please enter your name here