kyuuuuuuuuuuriのブログ

うぇぶエンジニアになりたくてなりたくて震えるもろきゅうの日記です

画像のリサイズ

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();

	}