/*** MethodName getTargetHeight* CreateTime 2022/7/14 14:00* Description 根据指定宽度,计算等比例高度** @param targetWidth 目标宽度* @param srcImage    图片信息* @return int 目标高度* @author Howe*/private static int getTargetHeight(int targetWidth, Image srcImage) {int targetHeight = srcImage.getHeight(null);return Math.round((float) targetHeight / ((float) srcImage.getWidth(null) / (float) targetWidth));}/*** MethodName createThumbnail* CreateTime 2022/7/14 14:31* Description** @param file       文件* @param uploadPath 服务器地址* @return void* @author Howe*/public String createThumbnail(InputStream file, String uploadPath) {try {BufferedImage read = ImageIO.read(file);//读取图片BufferedImage bufferedImageLogo = new BufferedImage(400, getTargetHeight(400, read), BufferedImage.TYPE_INT_RGB);Graphics2D graphics = (Graphics2D) bufferedImageLogo.getGraphics();//设置纯色背景色graphics.setBackground(Color.white);//通过设置的颜色来绘制背景色graphics.clearRect(0, 0, 400, getTargetHeight(400, read));graphics.drawImage(read.getScaledInstance(400, getTargetHeight(400, read), Image.SCALE_SMOOTH), 0, 0, null);graphics.dispose();//获取文件后缀uploadPath = uploadPath.substring(0, uploadPath.lastIndexOf(".") + 1);uploadPath += "jpg";//增加上传路径的前缀StringBuilder stringBuilder = new StringBuilder(uploadPath);stringBuilder.insert(stringBuilder.lastIndexOf("/") + 1, PREFIX);//保存的类型,保存的地址ImageIO.write(bufferedImageLogo, "jpg", new File(stringBuilder.toString()));//返回服务器相对路径return stringBuilder.toString();} catch (IOException e) {throw new JeecgBootException("生成缩略图出错!");}}

Graphics2D类扩展于 Graphics 类,Graphics2D是在Java平台上渲染二维形状,文本和图像的基本类。无需jar包这个是jdk自带的;

public void Graphics2DDetails() throws IOException {// 设置宽3400高661大小的底板画布BufferedImage canvas = new BufferedImage(400, 661, BufferedImage.TYPE_4BYTE_ABGR);//创建Graphics2D Graphics2D g = (Graphics2D) canvas.getGraphics();//设置纯色背景色g.setBackground(Color.gray);//通过设置的颜色来绘制背景色g.clearRect(0, 0, 400, 661);//画背景//读取图片BufferedImage backgroundImg = ImageIO.read(new URL(LOGOs));//将图片铺满整个底板画布上(X,Y设置从0,0这个定点开始画背景)g.drawImage(backgroundImg.getScaledInstance(400, 661, Image.SCALE_DEFAULT), 0, 0, null);//画图片//读取图片//new URl("地址");获取网络地址的图片如果是本地图片就去掉 new URL();BufferedImage bufferedImageLogo = ImageIO.read(new URL(LOGO));//写入图片设置图片的大小(宽,高),以及X,Y的定点位置g.drawImage(bufferedImageLogo.getScaledInstance(80, 50, Image.SCALE_DEFAULT), 10, 10, null);//设置文字//设置文字颜色g.setColor(Color.WHITE);//设置文字的字体,字体样式 (加粗,斜体等)和字体大小//文字字体没有时需把字体下载好后放入jre中//首先进入到服务器使用的jre目录// cd /usr/lib/jdk/jre/lib/fonts//如果进去之后没有fonts文件夹,就自己创建一个//进入之后,将 simhei.ttf 文件copy到该目录下即可,可以通过cp也可以用secureFx或者winscp直接上传,改的是jvm的字体 所以不需要重启服务器。g.setFont(new Font("宋体", Font.BOLD, 13));//要写入的文字内容,X轴坐标,Y轴坐标(X,Y合起来是一个定点,在这个定点开始写入内容)g.drawString("张三", 100, 450);//设置文字 竖向文字就是改变每个字的X,Y的定点位置Integer num = TEXT.length() % 7 == 0 ? TEXT.length() / 7 : TEXT.length() / 7 + 1;Integer width = 350;Integer height = 110;for (int j = 1; j <= num; j++) {height = 110;String str = "";if (j == num) {str = TEXT.substring((j - 1) * 7, TEXT.length());} else {str = TEXT.substring((j - 1) * 7, j * 7);}for (int i = 0; i < str.length(); i++) {g.setColor(Color.WHITE);g.setFont(new Font("宋体", Font.BOLD, 20));String val = String.valueOf(str.charAt(i));g.drawString(val, width, height);height += 20;}width -= 20;}//矩形//X轴20,Y轴30,宽是80,高是40Rectangle2D rect = new Rectangle2D.Double(20,30,80,40);//圆角矩形//左上角是(20,30),宽是130,高是100,圆角的弧度18,15数字越大越圆,当为0时跟矩形一样。RoundRectangle2D rectRound = new RoundRectangle2D.Double(20,30,130,100,18,15);//创建一个椭圆行的几何模板//X轴20,Y轴30,宽是100,高是50(如果宽高一样就是圆行,宽高不一样就是椭圆)Ellipse2D ellipse = new Ellipse2D.Double(20,30,100,50);//按照椭圆剪切g.setClip(ellipse);//读取托图片BufferedImage logo = ImageIO.read(new URL(LOGO));//设置图片(切记这里的图片一定要跟椭圆行一样大,小标定位一样否则展示的不是椭圆)g.drawImage(logo.getScaledInstance(100, 50, Image.SCALE_DEFAULT), 20, 30, null);//作用是销毁程序中指定的图形界面资源,如果在使用了graphics获得windows一些图形资源,而不进行关闭的话,就会造成内存溢出的情况的,导致程序卡死.类似close方法g.dispose();//保存的方式//保存到本地File file = new File("d://9.png");//使用ImageIo时会抛异常//保存的类型,保存的地址ImageIO.write(canvas, "png", file);//字节数组输出流ByteArrayOutputStream os = new ByteArrayOutputStream();//使用ImageIo时会抛异常//保存的类型,保存到字节流中(此时可以直接返回字节,使用阿里云上上传图片)ImageIO.write(canvas, "png", os);//把字节转换为流(使用流上传图片)InputStream inputStream = new ByteArrayInputStream(os.toByteArray());}

使用Graphics2D生成缩略图:

Graphics2D的使用详情相关推荐

  1. java graphics2d 画圆_java Graphics2D 画图

    平时出图都是前端画图的,本次画图是对响应时间有要求,所有给后端提的需求.这里就给出一个demo 还有列出其中遇到的几个小问题 1 首先列出结果图 2   遇到的问题 1  这是两张图片覆盖的. cov ...

  2. java制作海报一:java使用Graphics2D 在图片上写字,文字换行算法详解

    文章目录 前言 一.直接上代码 1. 写字方法 2. 换行算法 二. 叙述换行算法 前言 代码都上传到GitHub了,这里仅仅是贴出来主要部分,GitHub传送门:https://github.com ...

  3. java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题

    文章目录 先看成品 前言 一.项目目录结构 一.海报制作PosterUtil.java工具类 1. 描述 2. 代码 二.测试生成海报 1. 描述 2. 直接上代码 四.其他测试 1. Test1_C ...

  4. Laravel Dcat-admin 详情页多栏布局开发

    背景 随着 dcat-admin 越来越多的人使用,相信有许多跟我一样热爱这个项目的的人最后也会参与到这个项目中来,从使用者到项目的维护者,可以为项目贡献一份自己的力量.我以后也会将维护这个项目的一些 ...

  5. 亿级商品详情页架构演进技术解密

    商品详情页是什么 商品详情页是展示商品详细信息的一个页面,承载在网站的大部分流量和订单的入口.京东商城目前有通用版.全球购.闪购.易车.惠买车.服装.拼购.今日抄底等许多套详情页模板,通过一些特殊属性 ...

  6. 商品详细信息的代码html_电商网站的商品详情页系统架构

    小型电商网站的商品详情页系统架构 小型电商网站的页面展示采用页面全量静态化的思想.数据库中存放了所有的商品信息,页面静态化系统,将数据填充进静态模板中,形成静态化页面,推入 Nginx 服务器.用户浏 ...

  7. python个人网站开发_python 全栈开发,Day81(博客系统个人主页,文章详情页)

    一.个人主页 随笔分类 需求:查询当前站点每一个分类的名称以及对应的文章数 完成这个需求,就可以展示左侧的分类 它需要利用分组查询,那么必须要会基于双下划线的查询. 基于双下划线的查询,简单来讲,就是 ...

  8. Angular1.4.6框架简单读取数据库信息并渲染完成news新闻文章列表以及detail详情页功能(小试牛刀)

    项目结构 css/angular-common.css table tr td:first-child {/**背景图片*/width: 200px;height: 100px;/**居中填满*/ba ...

  9. Vue.js框架简单读取数据库信息并渲染完成news新闻文章列表以及detail详情页功能(小试牛刀)

    项目结构 news.html(新闻列表文件) <!doctype html> <html lang="en"> <head><meta c ...

最新文章

  1. SA-SSD:阿里达摩院最新3D检测力作(CVPR2020)
  2. VMware Fusion DHCP方式下如何指定虚拟机IP地址
  3. iOS开发(1)写在前面的话
  4. 学习office add-in
  5. vue在less中使用css3 calc 被解析 的问题
  6. js引擎执行代码的基本流程
  7. eclipse 安装 lombok插件
  8. python执行效率有多低_python – Scapy的低性能
  9. C语言动态内存管理和动态内存分配
  10. 漫步线性代数二十一——行列式引言
  11. Vue使用html2Canvas和canvas2Image下载二维码会模糊的问题解决方法
  12. 国内外黑客居然都在这些地方聚集
  13. word vba设置表格样式
  14. Java实现仿QQ登陆、好友界面(可连接数据库)
  15. Android TextToSpeech简单使用
  16. Yann LeCun、Yoshua Bengio和Geoffrey Hinton的联合综述《Deep Learning》翻译
  17. linux网卡驱动probe函数详解
  18. 【MySQL】exists与in的比较
  19. 关于MySQL8的URL和Driver的写法
  20. 来TDengine 开发者大会,探索数据架构的迭代升级

热门文章

  1. 虚拟化介绍及Docker与传统虚拟化有什么区别
  2. 计算机基础 MBR主引导记录
  3. 电子电路:电流镜电路
  4. R以及RStudio的获取和使用
  5. HTV-VIVE 连接 PC端 720云
  6. 计算机专业发展基金申报书,【计算机学院】国家自然科学基金申请书写作技巧及评审要点...
  7. 事务的四大属性ACID即事务的原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability.。...
  8. 鸿蒙IPC摄像机,【HiSpark IPC DIY Camera试用连载 】第二篇 视频的人脸检测
  9. 呼叫中心行业市场发展分析
  10. 现代软件工程_团队项目_阿尔法阶段_前端及后端新增功能_v1.0.1_2017.11.29