Java圖片旋轉

	FileInputStream in = new FileInputStream(picFile);
	BufferedImage bufferedImage = ImageIO.read(in);  
	InputStream inImg =rotateImg(bufferedImage,degree,null);
	
	/*
   * 圖片旋轉
   */
	public  InputStream rotateImg(BufferedImage image, int degree,
			Color bgcolor) throws IOException {
		int iw = image.getWidth();// 原始圖象的寬度
		int ih = image.getHeight();// 原始圖象的高度
		int w = 0;
		int h = 0;
		int x = 0;
		int y = 0;
		degree = degree % 360;
		if (degree < 0)
			degree = 360 + degree;// 將角度轉換到0-360度之間
		double ang = Math.toRadians(degree);// 將角度轉爲弧度

		/**
		 * 確定旋轉後的圖象的高度和寬度
		 */

		if (degree == 180 || degree == 0 || degree == 360) {
			w = iw;
			h = ih;
		} else if (degree == 90 || degree == 270) {
			w = ih;
			h = iw;
		} else {
			int d = iw + ih;
			w = (int) (d * Math.abs(Math.cos(ang)));
			h = (int) (d * Math.abs(Math.sin(ang)));
		}

		x = (w / 2) - (iw / 2);// 確定原點座標
		y = (h / 2) - (ih / 2);
		BufferedImage rotatedImage = new BufferedImage(w, h, image.getType());
		Graphics2D gs = (Graphics2D) rotatedImage.getGraphics();
		if (bgcolor == null) {
			rotatedImage = gs.getDeviceConfiguration().createCompatibleImage(w,
					h, Transparency.OPAQUE);
		} else {
			gs.setColor(bgcolor);
			gs.fillRect(0, 0, w, h);// 以給定顏色繪製旋轉後圖片的背景
		}

		AffineTransform at = new AffineTransform();
		at.rotate(ang, w / 2, h / 2);// 旋轉圖象
		at.translate(x, y);
		AffineTransformOp op = new AffineTransformOp(at,
				AffineTransformOp.TYPE_BICUBIC);
		op.filter(image, rotatedImage);
		image = rotatedImage;

		ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
		ImageOutputStream iamgeOut = ImageIO.createImageOutputStream(byteOut);

		ImageIO.write(image, "jpg", iamgeOut);
		InputStream inputStream = new ByteArrayInputStream(
				byteOut.toByteArray());

		return inputStream;
	}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章