
Java顺时针旋转图片
发布日期:2021-05-07 22:42:02
浏览次数:20
分类:精选文章
本文共 3030 字,大约阅读时间需要 10 分钟。
顺时针旋转图片 [270° 180° 90°]
/** * 对图片进行旋转 * * @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)); }
使用
@Override public byte[] testImgRotate(MultipartFile face) throws Exception { byte[] IdCartFace; if (face.getSize() > 300000) { //压缩 IdCartFace = ImageUtils.imageSet(face.getBytes()); } else { IdCartFace = face.getBytes(); } String imgFace = Base64.encode(IdCartFace).trim();//图片加密 /** * 图片人脸角度识别+旋转处理 */ int angel = faceDetect(imgFace);//返回旋转角度值 270 180 90 BufferedImage src = ImageIO.read(face.getInputStream()); //TODO 区间旋转 //顺时针旋转xx度 BufferedImage des1 = RotateImage.Rotate(src, angel); //int mn = (int) (Math.random() * (100 - 2) + 2); //ImageIO.write(des1, "jpg", new File("E:\\proj\\imagexz\\" + mn + ".jpg")); //转byte ByteArrayOutputStream out = new ByteArrayOutputStream(); //转换编码格式JPEG ImageIO.write(des1, "jpeg", out); byte[] re = out.toByteArray(); return re; }
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月01日 19时55分25秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
缓存穿透 / 缓存击穿 / 缓存雪崩 / 缓存一致性
2021-05-08
linux 的 pwd 命令
2021-05-08
linux 的 sleep 命令
2021-05-08
js 的 let var const 区别
2021-05-08
无线掌上B超USONIX-R6线阵B模图像初步
2021-05-08
无线掌上B超USONIX-R6凸阵B模图像初步
2021-05-08
react路由使用以及封装
2021-05-08
vue计算属性和监听器区别
2021-05-08
前端常用知识随手记
2021-05-08
11.2.6 时间值的小数秒
2021-05-08
11.2.7 日期和时间类型之间的转换
2021-05-08
附录 B 错误信息和常见问题
2021-05-08
redis 内存溢出_从数据存储的角度告诉你Redis为什么这么快!
2021-05-08
实例分析Facebook激励视频广告接入
2021-05-08
实例:使用OKGO下载网络压缩包资源,然后解压缩放在本地使用
2021-05-08
Android主题和样式精炼详解
2021-05-08
HDFS Missing Block诊断信息的改进
2021-05-08
解决mybatis嵌套查询使用PageHelper分页不准确
2021-05-08
Redis源码分析(七)--- zipmap压缩图
2021-05-08
大规模集群自动化部署工具--Chef的安装部署
2021-05-08