栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java实现PNG图片任意角度旋转

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java实现PNG图片任意角度旋转

java实现PNG图片任意角度旋转
代码如下,使用时直接调用rotate方法即可,旋转后的图片会覆盖原图片,angel为旋转的角度,支持任意旋转角度。

虽然我不懂,但我大受震撼;

private void rotate(File file, int angel) throws IOException {
		Image image = ImageIO.read(file);
		int width = image.getWidth(null);
		int height = image.getHeight(null);

		Rectangle rect = calcRotatedSize(new Rectangle(new Dimension(width, height)), angel);
		//因为我需要旋转的是png格式的透明背景图片,所以需要使用TYPE_INT_ARGB.
		BufferedImage bi = new BufferedImage(rect.width, rect.height, BufferedImage.TYPE_INT_ARGB);
		Graphics2D g = bi.createGraphics();

		// 进行转换
		g.translate((rect.width - width) / 2, (rect.height - height) / 2);
		g.rotate(Math.toRadians(angel), width / 2, height / 2);

		g.drawImage(image, 0, 0, null);

		ImageIO.write(bi, "PNG", file);
	}

	private Rectangle calcRotatedSize(Rectangle rectangle, int angel) {
		if (angel >= 90) {
			if (angel / 90 % 2 == 1) {
				int temp = rectangle.height;
				rectangle.height = rectangle.width;
				rectangle.width = temp;
			}
			angel = angel % 90;
		}

		double r = Math.sqrt(rectangle.height * rectangle.height + rectangle.width * rectangle.width) / 2;
		double len = 2 * Math.sin(Math.toRadians(angel) / 2) * r;
		double angelAlpha = (Math.PI - Math.toRadians(angel)) / 2;
		double angelDaltaWidth = Math.atan((double) rectangle.height / rectangle.width);
		double angelDaltaHeight = Math.atan((double) rectangle.width / rectangle.height);

		int lenDaltaWidth = (int) (len * Math.cos(Math.PI - angelAlpha - angelDaltaWidth));
		int lenDaltaHeight = (int) (len * Math.cos(Math.PI - angelAlpha - angelDaltaHeight));
		int desWith = rectangle.width + lenDaltaWidth * 2;
		int desHeight = rectangle.height + lenDaltaHeight * 2;

		return new Rectangle(new Dimension(desWith, desHeight));
	}

旋转效果:
原图

旋转270度之后:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/462953.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号