BufferedImageをファイルとして保存する方法


125

画像のサイズ変更にimgscalr Javaライブラリを使用してます。

resize()メソッド呼び出しの結果は、BufferedImageオブジェクトです。これをファイル(通常は.jpg)として保存します。

どうやってやるの?から行きたいBufferedImage-> Fileしかし、おそらくこれは正しいアプローチではありませんか?

回答:



24

クラスのBufferedImage書き込みメソッドを使用してオブジェクトを保存できますjavax.imageio.ImageIO。メソッドのシグネチャは次のとおりです。

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

これimは、RenderedImage書き込まれるformatNameであり、形式の非公式名(例:png)を含むString であり、output書き込まれるファイルオブジェクトです。PNGファイル形式のメソッドの使用例を以下に示します。

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

20

答えは、Javaドキュメントのチュートリアル「画像の書き込み/保存」にあります。

このImage I/Oクラスは、画像を保存するための次のメソッドを提供します。

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

チュートリアルでは、

BufferedImageクラスは、RenderedImageインターフェースを実装します。

そのため、メソッドで使用できます。

例えば、

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

APIに従って、メソッドが「書き込み中にエラーが発生した場合」をスローするため、write呼び出しをtryブロックで囲むことが重要です。IOException

また、メソッドの目的、パラメーター、戻り値、およびスローについても詳しく説明します。

指定された形式をサポートする任意のImageWriterを使用して画像をファイルに書き込みます。ファイルがすでに存在する場合、その内容は破棄されます。

パラメーター:

im-書き込まれるRenderedImage

formatName-形式の非公式名を含む文字列。

output-書き込まれるファイル。

戻り値:

適切なライターが見つからない場合はfalse。

スロー:

IllegalArgumentException-パラメータがnullの場合。

IOException-書き込み中にエラーが発生した場合。

ただし、formatNameそれでも、あいまいで曖昧に見える場合があります。チュートリアルは少しそれをクリアします:

ImageIO.writeメソッドは、「PNGライタープラグイン」を書き込むPNGを実装するコードを呼び出します。Image I / Oは拡張可能であり、幅広いフォーマットをサポートできるため、プラグインという用語が使用されます。

ただし、次の標準画像形式プラグイン:JPEG、PNG、GIF、BMP、WBMPは常に存在します。

ほとんどのアプリケーションでは、これらの標準プラグインの1つを使用するだけで十分です。彼らはすぐに利用できるという利点があります。

ただし、使用できる追加の形式があります。

Image I / Oクラスは、使用可能な追加のフォーマットのサポートをプラグインする方法を提供し、そのようなプラグインが多数存在します。システムでロードまたは保存できるファイル形式に関心がある場合は、ImageIOクラスのgetReaderFormatNamesメソッドとgetWriterFormatNamesメソッドを使用できます。これらのメソッドは、このJREでサポートされているすべてのフォーマットをリストした文字列の配列を返します。

String writerNames[] = ImageIO.getWriterFormatNames();

返される名前の配列には、インストールされている追加のプラグインが含まれ、これらの名前のいずれかをイメージライターを選択するためのフォーマット名として使用できます。

完全で実用的な例については、Oracleの例を参照できますSaveImage.java


9

java.awt.image.bufferedImageを作成してファイルに保存します。

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

ノート:

  1. MyFile.pngというファイルを作成します。
  2. 画像は500 x 500ピクセルです。
  3. 既存のファイルを上書きします。
  4. 画像の色は黒で、上部に青い縞模様があります。

1
  1. ダウンロードして追加imgscalr-LIB-xxjarimgscalr-LIB-XX-javadoc.jarをあなたのプロジェクトライブラリに。
  2. あなたのコードで:

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.