画像のリサイズ
javaで画像のリサイズをする
サイトを参考にして書いただけなので
ページのリンクだけはっておきますゆえ〜
お世話になりました。
http://d.hatena.ne.jp/toshyon/20060609/p1
ちなみに使ったのは
TYPE_BILINEAR
というやつですね。
そんなに大きい画像を処理するつもりもなかったので、
画像が大きすぎなければ全然汚くない。
一応ソースものせておくのだ
縦横、短い方を基準にして、400にリサイズ
縦横の比率は崩さないようにする
最後に400×400の画像に切り抜く
で、jpg形式で保存している
public static void main(String[] args) { SettingAction action = new SettingAction(); //クラス宣言(クラスは書いてない) try { action.resize("リサイズする画像のURL"); } catch (IOException e) { e.printStackTrace(); } } public void resize(String filePath) throws IOException{ int RESIZE_INT = 400; BufferedImage sourceImage = ImageIO.read(new File(filePath)); int height = sourceImage.getHeight(); int width = sourceImage.getWidth(); double resizeHeight = 0; double resizeWidth = 0; String newFileName = "111.jpg"; if(height > RESIZE_INT && width > RESIZE_INT){ if(height > width){ resizeWidth = RESIZE_INT; resizeHeight = (int)((double)RESIZE_INT / width * (double)height); }else{ resizeHeight = RESIZE_INT; resizeWidth = (int)((double)RESIZE_INT / height * (double)width); } } //リサイズ処理 BufferedImage resizeImage = new BufferedImage(width, height, sourceImage.getType()); AffineTransformOp ato = null; ato = new AffineTransformOp( AffineTransform.getScaleInstance((double)resizeWidth / width, (double) resizeHeight / height), AffineTransformOp.TYPE_BILINEAR); ato.filter(sourceImage, resizeImage); BufferedImage subImage = resizeImage.getSubimage(0, 0, RESIZE_INT, RESIZE_INT); ImageOutputStream imageStream = ImageIO.createImageOutputStream(new File("新しい画像の出力先" + newFileName)); ImageWriter writer = null; Iterator it = (Iterator) ImageIO.getImageWritersByFormatName("jpg"); writer = (ImageWriter) it.next(); writer.setOutput(imageStream); JPEGImageWriteParam jpgWriter = new JPEGImageWriteParam(Locale.getDefault()); jpgWriter.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); jpgWriter.setCompressionQuality(1f); writer.write(null, new IIOImage(subImage, null, null), jpgWriter); imageStream.flush(); writer.dispose(); imageStream.close(); }