サムネイルを自動生成しろとかいわれた

こうですか!?わかりません><

 //元ファイル
 String filePath = "c:/test.jpg";
 File imageFile = new File(filePath);
 BufferedImage image = ImageIO.read(imageFile);
 int width = image.getWidth();
 int height = image.getHeight();

 //縮小条件
 double ratio = 0.3;
 int destWidth = (int)(width * ratio);
 int destdHeight = (int)(height * ratio);

 //面積平均法とやらで縮小しる
 ImageFilter filter = new AreaAveragingScaleFilter(destWidth,destdHeight);
 ImageProducer producer = new FilteredImageSource(image.getSource(),filter);
 Image smallImage = Toolkit.getDefaultToolkit().createImage(producer);
 BufferedImage destImage = new BufferedImage(destWidth,destdHeight,image.getType());
 destImage.getGraphics().drawImage(smallImage,0,0,destWidth,destdHeight,null);

 //画質を指定してJPEGで出力
 File destFile = new File("c:/test_small.jpg");
 ImageOutputStream os = ImageIO.createImageOutputStream(destFile);

 Iterator writers = ImageIO.getImageWritersBySuffix("jpg");
 ImageWriter writer = (ImageWriter)writers.next();
 writer.setOutput(os);
 ImageWriteParam jpegParam = new JPEGImageWriteParam(Locale.getDefault());
 jpegParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
 jpegParam.setCompressionQuality(0.95f);
 writer.write(null,new IIOImage(destImage,null,null),jpegParam);

ググると色々な例が出てくるのだけれど、妥当だと思った線はこんな感じ。意識したのは

  • 縮小のときは面積平均法とやらが良いみたい(実際きれい)
  • JPEGImageEncoderはcom.sunパッケージだから使いたくねえ

くらいかな。ほんと画像処理ってわからんわ〜