java图片旋转
来源:互联网 发布:midi制作软件mac 编辑:程序博客网 时间:2024/06/16 08:10
转载:http://blog.csdn.net/heliang7/article/details/1088845
java实现图片旋转任意角度
下面是核心代码:
import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;/** * 图片旋转工具 * @author Bob * */public class RotateImage { public BufferedImage Rotate(Image src, int angle) { int src_width = src.getWidth(null); int src_height = src.getHeight(null); Rectangle rect_des = CalcRotatedSize(new Rectangle(new Dimension(src_width, src_height)), angle); BufferedImage res = null; res = new BufferedImage(rect_des.width, rect_des.height, BufferedImage.TYPE_INT_RGB); Graphics2D g2 = res.createGraphics(); //将 Graphics2D 上下文的原点平移到当前坐标系中的点 (x, y)g2.translate((rect_des.width - src_width) / 2, (rect_des.height - src_height) / 2); //将当前的 Graphics2D Transform 与平移后的旋转转换连接g2.rotate(Math.toRadians(angle), src_width / 2, src_height / 2); g2.drawImage(src, null, null); g2.dispose();return res; } /** * 计算图片的新大小 * @param src 图片 * @param angle 角度 * @return */public Rectangle CalcRotatedSize(Rectangle src, int angle) { if ((angle >= 90) && (angle / 90 % 2 == 1)) {int temp = src.height;src.height = src.width;src.width = temp;angle = angle % 90;}//根据图片高宽求出旋转半径 a的平方+b的平方=c的平方 是四边形的对角线长度/2 为旋转圆的半径double r = Math.sqrt(src.height * src.height + src.width * src.width)/2; double len = 2 * Math.sin(Math.toRadians(angle) / 2) * r; double angle_alpha = (Math.PI - Math.toRadians(angle)) / 2; double angle_dalta_width = Math.atan((double) src.height / src.width); double angle_dalta_height = Math.atan((double) src.width / src.height); int len_dalta_width = (int) (len * Math.cos(Math.PI - angle_alpha - angle_dalta_width)); int len_dalta_height = (int) (len * Math.cos(Math.PI - angle_alpha - angle_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)); } public static void main(String[] args) {try {BufferedImage src = ImageIO.read(new File("E:/A.png")); //旋转20度BufferedImage des = new RotateImage().Rotate(src, 20); //保存到本地ImageIO.write(des, "png", new File("e:/A2223.png"));} catch (IOException e) {e.printStackTrace();}}}
阅读全文
0 0
- JAVA图片旋转 小结
- java 图片旋转
- java 图片旋转
- java中的图片旋转
- java 图片旋转
- JAVA图片旋转 小结
- java 图片旋转
- java 图片旋转
- Java图片旋转
- java图片旋转
- java 图片旋转
- java图片旋转,缩放,翻转
- java图片旋转指定角度
- java图片旋转 90度
- java 图片绕中心旋转
- java 结合opencv图片旋转
- java实现image图片旋转
- java上传带旋转角度的图片旋转问题
- 解决SqlPlus控制台出现中文乱码的问题
- Unity X C#小记之引用其他C#文件
- lua中table.insert()排序问题
- MissionItem.cc
- 插头dp入门 HDU 1693 Eat the apples
- java图片旋转
- Spring boot分页显示数据(1)
- 适配器模式
- Demo scripts for gnuplot version 5
- TCP和UDP的区别
- hdu 6208 The Dominator of Strings 后缀自动机 LCS
- HDU:1569:方格取数(2)(最小割)
- Nginx基本安全优化
- MySQL分布式事务