サムネイルを自動生成しろとかいわれた
こうですか!?わかりません><
//元ファイル 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パッケージだから使いたくねえ
くらいかな。ほんと画像処理ってわからんわ〜