前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java实现图片无损任意角度旋转

Java实现图片无损任意角度旋转

作者头像
崔笑颜
发布于 2020-06-08 07:52:41
发布于 2020-06-08 07:52:41
3.9K00
代码可运行
举报
运行总次数:0
代码可运行

在做项目的时候遇到一个业务需要对图片进行旋转,于是找到一个工具类,亲测有效;在此与大家共享,需要用时可以直接用哈! 一、旋转工具类代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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));
    }
}

二、调用工具类的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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"));
 
    }
 
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java常用工具类 - 崔笑颜的博客
java中我们会常用一些判断如IP、电子邮箱、电话号码的是不是合法,那么我们怎么来判断呢,答案就是利用正则表达式来判断了,废话不多说,下面就是上代码。
崔笑颜
2021/02/02
6160
JAVA后台处理解决苹果手机IOS上传图片旋转90度问题
JAVA后台处理解决苹果手机IOS上传图片旋转90度问题 在做项目的时候遇到问题,通过苹果手机iphone(IOS)上传图片到服务器,后端得到的图片不是正常的。于是找到一个工具类,依赖我的业务进行简单的处理,记录下来,在此与大家共享,以便需要用时可以直接拿来用,上干货。
一诺千金
2020/04/30
1.6K0
手把手教你如何给图像加水印
在实际的系统开发中,某些业务场景下,我们经常需要给原始图片添加水印,以防止图片信息在互联网上随意传播!
Java极客技术
2022/12/02
1.1K0
手把手教你如何给图像加水印
springboot进行图片上传和添加水印
       java的上传图片和加水印基本上使用这些就可以了,大家也可以把加水印和图片上传抽成一个共同的方法方便以后开发项目的时候继续使用。后续我会分享更多的技术相关的内容,请大家多多关注。
十分钟空间
2022/08/17
1.4K0
java贪吃蛇小游戏(详解)[通俗易懂]
首先给出代码下载地址(含素材):https://share.weiyun.com/8hkvy1Ja
全栈程序员站长
2022/09/07
1.7K0
java贪吃蛇小游戏(详解)[通俗易懂]
Java为图片加水印的代码
import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; impor
用户7705674
2021/09/24
6170
Java 实现图片旋转及问题小结
图片旋转 图片旋转作为一个常见功能,实际使用中用处挺多,但是这次实现却遇到了个小问题,记录一二 使用的几个类 Graphics2d AffineTransform BufferedImage 1. Graphics2d 方式 利用Graphics2d的rotate方法来实现图片旋转,奇怪的是一直不生效,实现代码如下 BufferedImage bufferedImage = ImageUtil.getImageByPath("bg.png"); Graphics2D g2d = bufferedImage
一灰灰blog
2018/02/06
1.6K0
java 图片加水印(图片或者文本)
对于上传的图片,有时候我们需要加上水印来标识图片的来源,以下java代码用来处理图片加文字和图片水印
日薪月亿
2019/05/14
3.5K0
Java 生成透明图片
设置图片透明import org.apache.commons.io.FilenameUtils;import org.apache.commons.io.IOUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import javax.imageio.ImageIO;import javax.imageio.stream.ImageOutputStream;import javax.swing.\*;import java.awt.\*
IT小马哥
2022/12/31
1.1K0
C#使用OpenCV进行答题卡识别
type表示了矩阵中元素的类型以及矩阵的通道个数,它是一系列的预定义的常量,其命名规则为CV_(位数)+(数据类型)+(通道数),由type()返回,但是返回值是int型,不是OpenCV预定义的宏(CV_8UC1, CV_64FC1…),也就是说你用type函数得到的只是一个int型的数值,比如CV_8UC1返回的值是0,而不是CV_8UC1。
码客说
2022/09/09
2.9K1
C#使用OpenCV进行答题卡识别
java中验证码的使用
//验证码 public String execute()throws Exception{ //生成验证码 String code = SecurityCode.getSecurityCode(); ServletActionContext.getRequest().getSession().setAttribute(“code”,code); //生成图片 BufferedImage image = SecurityImage.createImage(code); //将验证码图片输出到浏览器 HttpServletResponse res = ServletActionContext.getResponse(); OutputStream out = res.getOutputStream(); ImageIO.write(image,“png”,out); return null; }
猫头虎
2024/04/07
1550
java中验证码的使用
用GeoTools实现shp+sld导出图片
概述: 本文讲解通过Geotools实现用shp和sld导出图片。 实现: 生成后的图片 实现代码: package com.lzugis.geotools; import java.awt.Gra
牛老师讲GIS
2018/10/23
1.9K0
用GeoTools实现shp+sld导出图片
基于java的贪吃蛇游戏的设计与实现(贪吃蛇安卓游戏源码)
某日,看见隔壁家的小朋友在玩一款网络爆款贪吃蛇游戏,感觉很好玩。自己刚好正在学习JAVA编程,也想实现一个类似功能的游戏Demo练手,在网上查看了不少源码案例,全都是很古老的方块式贪吃蛇游戏案例,没有想要的实现,因此自己动手实现一个JAVA版的贪吃蛇游戏。
全栈程序员站长
2022/08/02
1K0
基于java的贪吃蛇游戏的设计与实现(贪吃蛇安卓游戏源码)
Android平台RTSP、RTMP播放端如何实现YUV或ARGB数据按设定角度旋转
做音视频RTSP或RTMP直播播放器的时候,不免会遇到这样的诉求,实时播放或快照的时候,由于前端摄像头安装角度不一定是正向,导致播放或快照的时候,视频view显示的画面是呈90° 180°甚至270°旋转的。
音视频牛哥
2022/10/16
6720
Java实现地图的导出
**前文**讲了在前端实现地图的导出,本文简单的通过java实现一下后端地图的导出。
牛老师讲GIS
2021/12/06
1.1K0
Java实现地图的导出
高斯模糊的Java实现及优化
离散卷积是卷积对离散量的特殊形式,假设现有原图矩阵A,权值矩阵B,则点(x,y)处的离散卷积为
DearXuan
2022/01/19
7360
高斯模糊的Java实现及优化
java 图片压缩
从jpg、jpeg、png(3.44MB)压缩到440kb也非常清晰,可自动设置压缩程度(0-1),目前压缩成为jpg的比较理想,压缩后为png并不能减少多少,可能是由于png是属于无损压缩
botkenni
2022/09/23
10.7K1
java 图片压缩
Java 图片处理简易指南
图像处理是各类应用程序的重要组成部分,从简单的图像编辑到复杂的图像分析,广泛应用于计算机视觉、医学影像、遥感等领域。Java作为一种多功能且强大的编程语言,提供了丰富的库和框架来高效地处理图像处理任务。本文将带您了解Java图像处理的基本概念、工具以及实践示例,帮助您掌握Java图像处理技术。
繁依Fanyi
2024/08/02
2600
设置二维码图片背景透明教程
继之前的博客:PDF文件添加二维码水印教程、图片添加二维码水印教程之后,对之前的添加二维码水印功能进行完善,之前的程序生成的二维码图片背景不是透明的,所以不是很美观,所以本博客对程序进行完善,对二维码图片设置背景为透明的,不过这样美观了,但是很有可能出现遮住pdf文字或者图片的情况,这种情况会导致二维码不能扫描
SmileNicky
2019/07/03
1.4K0
Java使用OpenCV进行答题卡识别
https://github.com/opencv/opencv/releases
码客说
2022/09/09
3K1
Java使用OpenCV进行答题卡识别
相关推荐
Java常用工具类 - 崔笑颜的博客
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验