第一步:读入文件

public BufferedImage loadImageLocal(String path) {

try {

return ImageIO.read(new File(path));

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

第二步:缩放文件

/**

*

* @param mini 贴图

* @param Scale 缩放比例

* @return

*/

public BufferedImage modifyImageScale(BufferedImage mini,double Scale) {

int w = (int)Math.round(mini.getWidth()*Scale);

int h = (int)Math.round(mini.getHeight()*Scale);

//设置生成图片宽*高,色彩

BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);

//创建画布

Graphics2D g2 = bi.createGraphics();

//设置图片透明 注********:只有png格式的图片才能设置背景透明,jpg设置图片颜色变的乱七八糟

bi = g2.getDeviceConfiguration().createCompatibleImage(w, h, Transparency.TRANSLUCENT);

//重新创建画布

g2 = bi.createGraphics();

//画图

g2.drawImage(mini, 0,0,w,h, null);

//关闭资源

g2.dispose();

return bi;

}

第三步:旋转文件

/**

*

* @param mini 贴图

* @param ratio 旋转角度

* @return

*/

public BufferedImage modifyImageRatio(BufferedImage mini,int ratio) {

int src_width = mini.getWidth();

int src_height = mini.getHeight();

//针对图片旋转重新计算图的宽*高

Rectangle rect_des = CalcRotatedSize(new Rectangle(new Dimension(

src_width, src_height)), ratio);

//设置生成图片的宽*高,色彩度

BufferedImage res = new BufferedImage(rect_des.width, rect_des.height,BufferedImage.TYPE_INT_RGB);

//创建画布

Graphics2D g2 = res.createGraphics();

res = g2.getDeviceConfiguration().createCompatibleImage(rect_des.width, rect_des.height, Transparency.TRANSLUCENT);

g2 = res.createGraphics();

//重新设定原点坐标

g2.translate((rect_des.width - src_width) / 2,

(rect_des.height - src_height) / 2);

//执行图片旋转,rotate里包含了translate,并还原了原点坐标

g2.rotate(Math.toRadians(ratio), src_width / 2, src_height / 2);

g2.drawImage(mini, null, null);

g2.dispose();

return res;

}

private Rectangle CalcRotatedSize(Rectangle src, int angel) {

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));

}

第四步:合成文件

/**

*

* @param mini 贴图

* @param big 底图

* @param indexX x坐标位置

* @param indexY y坐标位置

* @return

*/

public BufferedImage modifyImagetogeter(BufferedImage mini, BufferedImage big,Integer indexX,Integer indexY) {

try {

int w =mini.getWidth();

int h =mini.getHeight();

System.out.println(w+" , "+h);

Graphics2D g = big.createGraphics();

g.drawImage(mini, indexX, indexY, w,h, null);

g.dispose();

} catch (Exception e) {

System.out.println(e.getMessage());

}

return big;

}

第五步:导出文件

public void writeImageLocal(String newPath, BufferedImage newImg) {

if (newPath != null && newImg != null) {

try {

File outputfile = new File(newPath);

ImageIO.write(newImg, "png", outputfile);

} catch (IOException e) {

System.out.println(e.getMessage());

}

}

}

java graphics2d旋转_JAVA用Graphics2D实现图片旋转,缩放,合成相关推荐

  1. java抗锯齿_java.awt.Graphics2D抗锯齿(字体平滑)处理

    由于项目要在图片中动态加入文字,没想到字体有毛边,找了N多文章没找到解决方法,最后用英文关键字在google上找到了,唉,为什么大家对这些都不关心呢? Java 2D - smooth text fo ...

  2. java graphics旋转_Java图像之自定义角度旋转(实例)

    图像的旋转需要调用 graphics2d 类的rotate()方法,该方法将根据指定的弧度旋转图像. 语法如下: rotate(double theta) 其中, theta 是指旋转的弧度. 说明: ...

  3. html让图片自动旋转360,html5 canvas 360图片旋转制作抽奖转盘代码

    特效描述:html5canvas 360图片旋转 抽奖转盘代码.60图片旋转制作抽奖转盘代码 代码结构 1. HTML代码 var colors = ["#B8D430", &qu ...

  4. html中如何使图片自动旋转90度,css实现图片旋转90度的方法

    css实现图片旋转90度的方法 发布时间:2020-08-31 11:44:39 来源:亿速云 阅读:550 作者:小新 小编给大家分享一下css实现图片旋转90度的方法,相信大部分人都还不怎么了解, ...

  5. java graphics2d 绘图_Java编程 Graphics2D类的绘图方法

    现在都讲究立体的效果,Graphics2D类的绘图方式就属于高级绘图了,在我们日常生活中经常提到的2d.3d电影都是立体的,而编程语言也是一样,可以实现2d的效果哦,下面就让我们一起来学习下吧! Ja ...

  6. java几何体类_java中Graphics2D的几何图形类有哪些?实例展示

    随着时代的进步与发展,越来越多的人开始投入到java的学习中来.今天就来为大家介绍一些java基础知识,java中Graphics2D的几何图形类有哪些,并且通过实际的代码为大家展示. java中Gr ...

  7. java graphics2d 绘图_java GUI Graphics2D 绘图

    Graphics类提供基本绘图方法,Graphics2D类提供更强大的绘图能力.本节讲解Graphics类,下节讲解Graphics2D. Graphics类提供基本的几何图形绘制方法,主要有:画线段 ...

  8. ckeditor java 上传_java使用CKEditor实现图片上传功能

    java如何使用ckeditor实现图片上传功能,具体内容如下 1.根据实际需要下载指定的ckeditor 2.删除文件ckeditor/plugins/image/dialogs/image.js预 ...

  9. java swing背景_java swing 设置背景图片的方法一

    下面是偶写着玩的下测试的代码:(不好之处,请多多指教,大家共同进步 ) import java.awt.*; import javax.swing.*; public class ImageDemo ...

最新文章

  1. docker hub 代理_MAC版 的最新Docker 2.2版本配置国内代理的解决办法
  2. MySQL主从虚IP_Mysql主从同步时Slave_IO_Running:Connecting ; Slave_SQL_Running:Yes的情况故障排除...
  3. oracle笔记整理2
  4. php 判断文件类型,php 判断图片文件的真实类型
  5. Think In Java读书笔记:内部类覆盖及其初始化
  6. 数据库联接字符串大全
  7. Android 自定义View修炼-打造完美的自定义侧滑菜单/侧滑View控件(转)
  8. 问题十八:怎么对ray tracing图形进行消锯齿
  9. ZTree的API文档分享
  10. OrCAD之Design Resources的文件导入新的.dsn文件后,旧的。dsn文件如何去除?
  11. mysql 怎么存储毫秒,MySQL存储毫秒数据的方法
  12. ps cs6安装教程
  13. Windows 10 版本 1507 中的新 AppLocker 功能
  14. python读取加密excel_python使用pywin32模块给excel文件加密解密
  15. C#上位机与台达PLC通信,modbus TCP协议
  16. 飞机大战学习心得(Dev-C++)
  17. Cortex-A8处理器编程(上)
  18. QQ邮箱取消免费扩容;苹果搜索引擎“胎死腹中”,核心成员已回归谷歌麾下;Xcode 14导致应用体积大增|极客头条
  19. 命令行修改mysql密码
  20. wiki百科词向量训练资料及其模型

热门文章

  1. 7.awd不死马权限维持及变种
  2. (Arduino)蓝牙和 APPinventor实现一键SOS求救(一)
  3. 公众号认证?小程序认证?小程序复用公众号资质进行认证?
  4. JAVA最小质因子之和
  5. linux下的office 速度慢,Microsoft office2016打开很慢解决
  6. Xcode真机调试中There was an internal API error错误解决方法
  7. 【seo入门教程】零基础新手学seo必备
  8. openlayers加载天地图及天地图地形图影像图
  9. 秘猿发布企业级开源区块链产品CITA
  10. Mac电脑如何通过终端隐藏应用程序?