web-dev-qa-db-ja.com

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

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

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

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

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

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

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

ここで、imは書き込まれるRenderedImageformatNameは形式の非公式名(たとえばpng)を含む文字列、outputは書き込まれるファイルオブジェクトです。 PNGファイル形式のメソッドの使用例を次に示します。

ImageIO.write(image, "png", file);
20
Raj Adroit

答えはJava Documentationの 画像の作成/保存のチュートリアル にあります。

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
}

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

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

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

パラメーター:

im-書き込まれるRenderedImage.

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

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

戻り値:

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

スロー:

IllegalArgumentException-いずれかのパラメーターがnullの場合。

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

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

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

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

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

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

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

String writerNames[] = ImageIO.getWriterFormatNames();

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

完全で実用的な例については、Oracleの SaveImage.Javaの例を参照してください。

10
K_7

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. 画像の色は黒で、上部に青いストライプがあります。
9
Eric Leschinski
  1. imgscalr-lib-x.x.jar および imgscalr-lib-x.x-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));
    
1
Zon

ワンライナーとして:

ImageIO.write(Scalr.resize(ImageIO.read(...), 150));
0
Nicolas Modrzyk