Java实现图片无损任意角度旋转
强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan
【前言】
在做项目的时候遇到一个业务需要对图片进行旋转,于是找到一个工具类,亲测有效;在此与大家共享,需要用时可以直接用哈!
【实战】
一、旋转工具类代码:
package zh.test.utils;import java.awt.*;
import java.awt.image.BufferedImage;/*** 图片旋转工具类*/
public class RotateImage {/*** 对图片进行旋转** @param src 被旋转图片* @param angel 旋转角度* @return 旋转后的图片*/public static BufferedImage Rotate(Image src, int angel) {int src_width = src.getWidth(null);int src_height = src.getHeight(null);// 计算旋转后图片的尺寸Rectangle rect_des = CalcRotatedSize(new Rectangle(new Dimension(src_width, src_height)), angel);BufferedImage res = null;res = new BufferedImage(rect_des.width, rect_des.height,BufferedImage.TYPE_INT_RGB);Graphics2D g2 = res.createGraphics();// 进行转换g2.translate((rect_des.width - src_width) / 2,(rect_des.height - src_height) / 2);g2.rotate(Math.toRadians(angel), src_width / 2, src_height / 2);g2.drawImage(src, null, null);return res;}/*** 计算旋转后的图片** @param src 被旋转的图片* @param angel 旋转角度* @return 旋转后的图片*/public static Rectangle CalcRotatedSize(Rectangle src, int angel) {// 如果旋转的角度大于90度做相应的转换if (angel >= 90) {if (angel / 90 % 2 == 1) {int temp = src.height;src.height = src.width;src.width = temp;}angel = angel % 90;}double r = Math.sqrt(src.height * src.height + src.width * src.width) / 2;double len = 2 * Math.sin(Math.toRadians(angel) / 2) * r;double angel_alpha = (Math.PI - Math.toRadians(angel)) / 2;double angel_dalta_width = Math.atan((double) src.height / src.width);double angel_dalta_height = Math.atan((double) src.width / src.height);int len_dalta_width = (int) (len * Math.cos(Math.PI - angel_alpha- angel_dalta_width));int len_dalta_height = (int) (len * Math.cos(Math.PI - angel_alpha- angel_dalta_height));int des_width = src.width + len_dalta_width * 2;int des_height = src.height + len_dalta_height * 2;return new Rectangle(new Dimension(des_width, des_height));}
}
二、调用工具类的代码:
package zh.test.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import zh.test.utils.RotateImage;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;/*** 测试图片旋转*/
@RestController
@RequestMapping(value = "/test")
public class TestController {@RequestMapping(method = RequestMethod.POST)public void testImgRotate(MultipartFile multipartFile) throws Exception {BufferedImage src = ImageIO.read(multipartFile.getInputStream());//顺时针旋转90度BufferedImage des1 = RotateImage.Rotate(src, 90);ImageIO.write(des1, "jpg", new File("e:/90.jpg"));//顺时针旋转180度BufferedImage des2 = RotateImage.Rotate(src, 180);ImageIO.write(des2, "jpg", new File("c:/180.jpg"));//顺时针旋转270度BufferedImage des3 = RotateImage.Rotate(src, 270);ImageIO.write(des3, "jpg", new File("c:/270.jpg"));}}
三、效果:
1、被旋转的图片:
2、顺时针旋转90度图片:
3、顺时针旋转180度图片:
4、顺时针旋转270度图片:
【总结】
1、写代码要尽可能的考虑周全,对于自己怀疑可能会出错的事情千万不要抱着侥幸心理庆幸可以逃过去;60年前墨菲就为我们总结好了---墨菲定律!
2、遇到问题后要学会跳出来想,不要轻易先下结论,不然很容易钻进去;要有一定思路去排查,即便你十分肯定没问题的地方也要认真去检查,有时候问题往往出在这些被我们忽略的地方。
Java实现图片无损任意角度旋转相关推荐
- JAVA对图片的任意角度旋转,以及镜像操作
package relevantTest; /* * 该代码实现了对图像的水平镜像变换,垂直镜像变换,任意角度旋转,jtf的实时监控,以及对图像的缩放变换,以及按钮的若隐若现效果. * 在对图像进 ...
- java如何利用rotate旋转图片_java实现图片无损任意角度旋转
前言 在做项目的时候遇到一个业务需要对图片进行旋转,于是找到一个工具类,亲测有效:在此与大家共享,需要用时可以直接用哈! 实战 一.旋转工具类代码: package zh.test.utils; im ...
- java如何利用rotate旋转图片_JAVA对图片的任意角度旋转,以及镜像操作
package relevantTest; /* * 该代码实现了对图像的水平镜像变换,垂直镜像变换,任意角度旋转,jtf的实时监控,以及对图像的缩放变换,以及按钮的若隐若现效果. * 在对图像进行任 ...
- java 图片旋转_Java实现图片内容无损任意角度旋转
主要问题是如何在图片做旋转后计算出新图片的长宽. 在java 2d和基本math库的帮助下,其实利用简单的计算就可以知道. 以下算法只是计算出旋转小于90度时的公式.当旋转大于90时,可以先把问题域换 ...
- java 旋转图片_Java实现图片翻转以及任意角度旋转
最近几天在做一个项目,因为涉及到了图片(绝大部分都不是整图,是把一张张的大图切成小图,也就是Title)的翻转以及90°旋转,弄得焦头烂额.在网上搜索好几天,发现用到的方法都是比较公式化的,对于只是在 ...
- java如何利用rotate旋转图片_Java实现图片翻转以及任意角度旋转
最近几天在做一个项目,因为涉及到了图片(绝大部分都不是整图,是把一张张的大图切成小图,也就是Title)的翻转以及90°旋转,弄得焦头烂额.在网上搜索好几天,发现用到的方法都是比较公式化的,对于只是在 ...
- 任意角度旋转图片的ground truth目标检测框
任意角度旋转图片的ground truth目标检测框 (感谢前辈)转自:https://zhuanlan.zhihu.com/p/72129125 因为检测一个物体的时候需要对目标进行多个任意角度的旋 ...
- java图像处理之实现任意角度图像旋转
原理及步骤: 1.旋转角度:图像顺时针或逆时针旋转的角度,以θ表示,需要用户输入: 2.旋转中心:一般以图像中心作为旋转中心,周围像素围绕其旋转: 3.画布大小:由于图像旋转后产生的图像宽和高与原始图 ...
- 在word中输入任意角度旋转图片
Sub 图片旋转任意角度() Dim sha As Shape, isa As InlineShapeStatic s As IntegerApplication.ScreenUpdating = 0 ...
- python 截取图片中的一部分并且复制到另一张图片中 (任意角度旋转)
目的:截取左面均压环,并且对截取的区域进行旋转和复制 进行数据增强 import PIL.Image as img import osIMG = 'C:\\Users\\Ilearn\\Desktop ...
最新文章
- UIBezierPath画圆弧的记录
- Java Stringbuilder简单介绍
- 主曲率 matlab,基于Matlab的Hertz接触参数和主曲率差函数关系的拟合
- ios 内存使用陷阱
- [css] 你知道什么是面向对象的css(oocss)吗?有没有实践过?
- Spring中IoC两种接口和两种依赖注入方式的比较
- Python绘制三次贝塞尔曲线
- 铁乐学python_day29_模块与包学习4
- 安装Fortran语言编程环境全流程记录
- 协同系统php,php然之协同管理系统
- python-docx插入图片调整为封面图
- C#删除IE临时文件、缓存、Cookies
- rockchip rk3566 调试杂记
- grpc-go源码剖析七十四之什么情况下服务器端通知客户端,双方关闭链接?(goAway帧处理逻辑)
- python爬虫网页脚本_python网络爬虫之Scrapy
- 粉丝福利 | 秒 get 支付宝同款扫码组件
- 基于Java实现的新冠肺炎疫情实时动态地图
- 葡聚糖-叶酸;Dextran-FA;Dextran-Folicacid 结构式;科研试剂简介
- CIO40: 学习.遇见更优秀的自己
- Win10无法访问网上邻居共享设备及共享文件夹错误代码(0x80004005)
热门文章
- CTFShow“萌心区“WP题解
- 美赛论文Latex模板说明
- 【MCM-2017】2017年数学建模美赛题目原文及翻译-A (个人思路)
- 千入坑坑之安装matlab,114错误,几种系统报错解决
- Linux下安装lingo教程-centos6 64位
- 《tcpip详解卷一》:150行代码拉开协议栈实现的篇章
- 写web项目时出现的错误:来自“http://localhost:63342/Demo/test01/day0618/css/a.css”的资源已被阻止,因为 MIME 类型(“text/html”)
- 关于快逸报表超链接的使用方式。
- 基于SSM校园一卡通管理系统
- android 执行Shell命令