非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

JavaFXで画像の拡大・縮小。Imageクラスでサイズ指定しながら開くとメモリ消費削減になる

   

JavaFX(Java8)で画像の拡大・縮小の方法です。

Imageクラスでは、画像をロードするときにサイズ変更することで消費されるメモリー量を削減できるそうです。

広告

画像ファイルをサイズ指定で読み込んで別名で保存するまでのプログラムは以下のとおりです。コメントアウトしていますが、記載したimport文はソース先頭に設置してください。

//import javafx.scene.image.*; //Image
//import javax.imageio.*;      //ImageIO
//import javafx.embed.swing.*; //SwingFXUtils
//import java.io.*;            //File

Image img = new Image("test.jpg", 500, 0, true, false);
try{
  ImageIO.write(SwingFXUtils.fromFXImage(img, null), "jpg", new File("test3.jpg"));
  System.out.println("保存しました");
}catch(Exception ex){
  System.out.println(ex);
}
 

 

画像をサイズ指定しながら読み込むのはImageクラスですが、コンストラクタは以下の通りです。Imageクラスのコンストラクタは複数あります。第一引数がInputStreamではなくパスを直接指定できるString型のもあります。

Image(InputStream is, double requestedWidth, double requestedHeight, 
       boolean preserveRatio, boolean smooth)

//is: ファイルの指定
//requestedWidth: 画像の指定幅
//requestedHeight: 画像の指定高さ
//preserveRatio: 縦横比 trueで縦横比固定
//smooth: 今回使わず(よくわからん)
 

 

画像の縦横比を無視してサイズ指定して開く場合

元画像の縦横比を無視して指定サイズの大きさで開く場合は第四引数をfalseにします。

Image img = new Image("ImageTest01.jpg", 300, 300, false, false);
 

 

以下の通り縦に引き延びたような画像になりました。

 

元画像の縦横比を維持してサイズ指定して開く場合

元画像の縦横比を無視して指定サイズの大きさで開く場合は第四引数をtureにします。 横幅を指定サイズにしたいので縦幅は0にしておきました。

Image img = new Image("ImageTest01.jpg", 300, 0, true, false);
 

以下の通り縦に引き延びたような画像になりました。縦横比がちゃんと維持されています。

 

広告

 - Java