Bagaimana cara menyimpan BufferedImage sebagai File


126

Saya menggunakan pustaka Java imgscalr untuk mengubah ukuran gambar.

Hasil dari panggilan metode resize () adalah objek BufferedImage. Sekarang saya ingin menyimpan ini sebagai file (biasanya .jpg).

Bagaimana saya bisa melakukan itu? Saya ingin pergi dari BufferedImage-> Filetetapi mungkin ini bukan pendekatan yang benar?

Jawaban:


239
File outputfile = new File("image.jpg");
ImageIO.write(bufferedImage, "jpg", outputfile);

7
Juga, pastikan bahwa outputfile ada. Jika tidak, write () akan (salah) melempar NullPointerException
Cody S

9
kelilingi dengan mencoba / menangkap.
Lou Morda

Jangan tangkap NullPointerException, gunakanif (outputfile.exists())
Danon

24

Anda dapat menyimpan BufferedImageobjek menggunakan metode tulis javax.imageio.ImageIOkelas. Tanda tangan metode ini seperti ini:

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

Berikut imini yang RenderedImageharus ditulis, formatNameadalah String yang berisi nama informal dari format (misalnya png) dan outputmerupakan objek file yang akan ditulis. Contoh penggunaan metode untuk format file PNG ditunjukkan di bawah ini:

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

20

Jawabannya ada dalam Tutorial Dokumentasi Java untuk Menulis / Menyimpan Gambar .

The Image I/Okelas menyediakan metode berikut untuk menyimpan gambar:

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

Tutorial menjelaskan itu

Kelas BufferedImage mengimplementasikan antarmuka RenderedImage.

sehingga bisa digunakan dalam metode.

Sebagai contoh,

try {
    BufferedImage bi = getMyImage();  // retrieve image
    File outputfile = new File("saved.png");
    ImageIO.write(bi, "png", outputfile);
} catch (IOException e) {
    // handle exception
}

Penting untuk mengelilingi writepanggilan dengan blok percobaan karena, sesuai API , metode ini akan menampilkan IOException"jika terjadi kesalahan selama penulisan"

Juga dijelaskan tujuan, parameter, pengembalian, dan lemparan metode, secara lebih rinci:

Menulis gambar menggunakan ImageWriter arbitrer yang mendukung format yang diberikan ke File. Jika sudah ada File, isinya akan dibuang.

Parameter:

im - RenderedImage yang akan ditulis.

formatName - String yang berisi nama informal format.

output - File yang akan ditulis.

Pengembalian:

false jika penulis yang sesuai tidak ditemukan.

Melempar:

IllegalArgumentException - jika ada parameter yang null.

IOException - jika terjadi kesalahan selama penulisan.

Namun, formatNamemungkin masih tampak agak kabur dan ambigu; tutorial menjelaskannya sedikit:

Metode ImageIO.write memanggil kode yang mengimplementasikan penulisan PNG sebagai "plug-in penulis PNG". Istilah plug-in digunakan karena Image I / O dapat diperluas dan dapat mendukung berbagai format.

Tetapi plugin format gambar standar berikut: JPEG, PNG, GIF, BMP dan WBMP selalu ada.

Untuk sebagian besar aplikasi, cukup menggunakan salah satu dari plugin standar ini. Mereka memiliki keuntungan karena selalu tersedia.

Namun, ada format tambahan yang dapat Anda gunakan:

Kelas Image I / O menyediakan cara untuk menyambungkan dukungan untuk format tambahan yang dapat digunakan, dan banyak plugin semacam itu ada. Jika Anda tertarik dengan format file apa yang tersedia untuk dimuat atau disimpan di sistem Anda, Anda dapat menggunakan metode getReaderFormatNames dan getWriterFormatNames dari kelas ImageIO. Metode ini mengembalikan larik string yang mencantumkan semua format yang didukung di JRE ini.

String writerNames[] = ImageIO.getWriterFormatNames();

Array nama yang dikembalikan akan menyertakan plug-in tambahan yang diinstal dan salah satu nama ini dapat digunakan sebagai nama format untuk memilih penulis gambar.

Untuk contoh lengkap dan praktis, seseorang dapat merujuk ke contoh Oracle SaveImage.java.


9

Buat dan simpan java.awt.image.bufferedImage ke file:

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();
        }
    }
}

Catatan:

  1. Membuat file bernama MyFile.png.
  2. Gambar berukuran 500 kali 500 piksel.
  3. Menimpa file yang sudah ada.
  4. Warna gambarnya hitam dengan garis biru di atasnya.

1
  1. Unduh dan tambahkan imgscalr-lib-xxjar dan imgscalr-lib-xx-javadoc.jar ke Perpustakaan Proyek Anda.
  2. Dalam kode Anda:

    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));

0

Sebagai satu liner:

ImageIO.write(Scalr.resize(ImageIO.read(...), 150));

11
Scalr tidak bisa dijelaskan.
Zon
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.