imgscalr Javaライブラリを使用して画像のサイズを変更しています。
Resize()メソッド呼び出しの結果は、BufferedImageオブジェクトです。これをファイル(通常は.jpg)として保存します。
どうやってやるの? BufferedImage
-> File
から行きたいのですが、おそらくこれは正しいアプローチではありませんか?
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
は書き込まれるRenderedImage
、formatName
は形式の非公式名(たとえばpng)を含む文字列、output
は書き込まれるファイルオブジェクトです。 PNGファイル形式のメソッドの使用例を次に示します。
ImageIO.write(image, "png", file);
答えは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
の例を参照してください。
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();
}
}
}
注:
あなたのコードで:
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));
ワンライナーとして:
ImageIO.write(Scalr.resize(ImageIO.read(...), 150));