BufferedImage'ı Dosya Olarak Kaydetme


126

Bir görüntüyü yeniden boyutlandırmak için imgscalr Java kitaplığını kullanıyorum .

Resize () yöntemi çağrısının sonucu bir BufferedImage nesnesidir. Şimdi bunu bir dosya (genellikle .jpg) olarak kaydetmek istiyorum.

Bunu nasıl yapabilirim? Gitmek istiyorum BufferedImage-> Fileama belki de bu doğru yaklaşım değil?

Yanıtlar:


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

7
Ayrıca, çıktı dosyasının var olduğundan emin olun. Aksi takdirde, write () (yanlış olarak) bir NullPointerException oluşturacaktır
Cody S

9
bir dene / yakala ile çevreleyin.
Lou Morda

Yakalama NullPointerException, kullanmaif (outputfile.exists())
Danon

24

Sınıfın BufferedImageyazma yöntemini kullanarak bir nesneyi kaydedebilirsiniz javax.imageio.ImageIO. Yöntemin imzası şu şekildedir:

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

İşte imise RenderedImage, yazılacak formatNameformatının gayri adını içeren dize (örn png) ve outputyazılacak dosya nesnedir. PNG dosya formatı için yöntemin örnek bir kullanımı aşağıda gösterilmiştir:

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

20

Cevap, Java Dokümantasyonunun Görüntü Yazma / Kaydetme Eğitiminde yatmaktadır .

Image I/OSınıfı, bir görüntü kaydetmek için aşağıdaki yöntem de sağlar:

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

Öğretici bunu açıklıyor

BufferedImage sınıfı, RenderedImage arabirimini uygular.

bu yüzden yöntemde kullanılabilir.

Örneğin,

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

writeÇağrıyı bir try bloğu ile çevrelemek önemlidir, çünkü API'ye göre yöntem IOException"yazma sırasında bir hata oluşursa" atar.

Ayrıca yöntemin amacı, parametreleri, geri dönüşleri ve atışları daha ayrıntılı olarak açıklanmaktadır:

Verilen biçimi bir Dosyaya destekleyen rastgele bir ImageWriter kullanarak bir görüntü yazar. Halihazırda bir Dosya varsa, içeriği atılır.

Parametreler:

im - yazılacak bir RenderedImage.

formatName - biçimin resmi olmayan adını içeren bir String.

output - yazılacak bir dosya.

İadeler:

uygun bir yazar bulunmazsa false.

atar:

IllegalArgumentException - herhangi bir parametre null ise.

IOException - yazma sırasında bir hata oluşursa.

Ancak formatNameyine de belirsiz ve belirsiz görünebilir; öğretici bunu biraz açıklar:

ImageIO.write yöntemi, PNG'yi bir "PNG yazıcı eklentisi" yazarken uygulayan kodu çağırır. Eklenti terimi, Görüntü G / Ç genişletilebilir olduğundan ve çok çeşitli biçimleri destekleyebildiğinden kullanılır.

Ancak aşağıdaki standart görüntü formatı eklentileri: JPEG, PNG, GIF, BMP ve WBMP her zaman mevcuttur.

Çoğu uygulama için bu standart eklentilerden birini kullanmak yeterlidir. Hazır bulunma avantajına sahiptirler.

Bununla birlikte, kullanabileceğiniz ek formatlar vardır:

Image I / O sınıfı, kullanılabilecek ek formatları desteklemek için bir yol sağlar ve bu tür birçok eklenti mevcuttur. Sisteminize hangi dosya biçimlerinin yüklenebileceğini veya kaydedilebileceğini merak ediyorsanız, ImageIO sınıfının getReaderFormatNames ve getWriterFormatNames yöntemlerini kullanabilirsiniz. Bu yöntemler, bu JRE'de desteklenen tüm biçimleri listeleyen bir dizi dizisi döndürür.

String writerNames[] = ImageIO.getWriterFormatNames();

Döndürülen ad dizisi, kurulu olan ek eklentileri içerecektir ve bu adlardan herhangi biri, bir görüntü yazıcı seçmek için bir biçim adı olarak kullanılabilir.

Tam ve pratik bir örnek için, Oracle'ın örneğine bakılabilir SaveImage.java.


9

Bir java.awt.image.bufferedImage oluşturun ve dosyaya kaydedin:

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

Notlar:

  1. MyFile.png adlı bir dosya oluşturur.
  2. Görüntü 500 x 500 pikseldir.
  3. Mevcut dosyanın üzerine yazar.
  4. Görüntünün rengi siyahtır ve üstte mavi bir şerit vardır.

1
  1. İmgscalr-lib-xxjar ve imgscalr-lib-xx-javadoc.jar dosyasını indirin ve Proje Kitaplıklarınıza ekleyin.
  2. Kodunuzda:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.