当前位置: 首页 > news >正文

Java:使用 Graphics2D 类来绘制图像

目录

  • 过程介绍
    • 创建一个 `BufferedImage` 对象
    • 创建一个 `Graphics2D` 对象
    • 绘制字符和干扰线
    • 将生成的图像保存到文件
  • 示例代码

过程介绍

创建一个 BufferedImage 对象

  • 首先创建一个 BufferedImage 对象来表示图像

创建一个 Graphics2D 对象

  • 然后使用 createGraphics() 方法创建一个 Graphics2D 对象

绘制字符和干扰线

  • 最后通过该对象绘制字符和干扰线。

将生成的图像保存到文件

  • 使用 ImageIO.write() 方法将生成的图像保存到文件中,或者将其输出到控制台。

示例代码

import java.awt.*;  
import java.awt.image.BufferedImage;  
import java.util.Random;public class CaptchaGenerator {private static final String CHAR_POOL = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";  private static final int WIDTH = 160;  private static final int HEIGHT = 50;  private static final int CHAR_NUM = 4;  private static final int LINE_NUM = 10;public static void main(String[] args) {  BufferedImage captchaImage = generateCaptchaImage();  // 保存图片到文件  // ImageIO.write(captchaImage, "png", new File("captcha.png"));  // 输出图片到控制台  ImageIO.write(captchaImage, "png", System.out);  }private static BufferedImage generateCaptchaImage() {  BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);  Graphics2D g = image.createGraphics();  Random random = new Random();// 设置背景颜色  g.setColor(Color.WHITE);  g.fillRect(0, 0, WIDTH, HEIGHT);// 绘制字符  for (int i = 0; i < CHAR_NUM; i++) {  g.setColor(getRandomColor());  char c = getRandomChar();  g.drawString(String.valueOf(c), 30 * i + 20, 30);  }// 绘制干扰线  for (int i = 0; i < LINE_NUM; i++) {  g.setColor(getRandomColor());  int x1 = random.nextInt(WIDTH);  int y1 = random.nextInt(HEIGHT);  int x2 = random.nextInt(WIDTH);  int y2 = random.nextInt(HEIGHT);  g.drawLine(x1, y1, x2, y2);  }g.dispose();  return image;  }private static Color getRandomColor() {  Random random = new Random();  int r = random.nextInt(256);  int g = random.nextInt(256);  int b = random.nextInt(256);  return new Color(r, g, b);  }private static char getRandomChar() {  Random random = new Random();  int index = random.nextInt(CHAR_POOL.length());  return CHAR_POOL.charAt(index);  }  
}
http://www.lryc.cn/news/179385.html

相关文章:

  • VUE2项目:尚品汇VUE-CLI脚手架初始化项目以及路由组件分析(一)
  • 输入网址input,提取标题和正文
  • docker--redis容器部署及与SpringBoot整合
  • 数据库:Hive转Presto(二)
  • docker安装apisix全教程包含windows和linux
  • 【C++进阶】:C++11
  • 9.30消息队列实现进程之间通信方式代码,现象
  • 【Oracle】Oracle系列之十三--游标
  • 【Linux】——基操指令(二)
  • 如何用Angular和NativeScript开发IOS程序?
  • python 使用 scapy 扫描内网IP或端口
  • 14:00面试,14:08就出来了,问的问题有点变态
  • Spring Security 简单token配置
  • 2023 “华为杯” 中国研究生数学建模竞赛(F题)深度剖析|数学建模完整代码+建模过程全解全析
  • FFmpeg 命令:从入门到精通 | ffplay 简单过滤器
  • 应用在手机触摸屏中的电容式触摸芯片
  • 计算机网络之传输层
  • vue下载在前端存放的pdf文件
  • 自学WEB后端05-Node.js后端服务链接数据库redis
  • 【计算机网络】 基于TCP的简单通讯(客户端)
  • RabbitMQ配置
  • 火热报名中 | 2天峰会、20+热门议题,AutoESG 2023数智低碳---中国汽车碳管理创新峰会亮点抢先看!
  • 机器学习——seaborn实用画图方法简介
  • leetCode 188.买卖股票的最佳时机 IV 动态规划 + 状态压缩
  • Lua学习笔记:debug.sethook函数
  • 信息化发展74
  • Go-Ldap-Admin | openLDAP 同步钉钉、企业微信、飞书组织架构实践和部分小坑
  • elasticsearch+logstash+kibana整合(ELK的使用)第一课
  • 宝塔 php修改了php.ini配置不生效
  • Unrecognized option ‘stream_loop‘.(版本不匹配,利用make编译安装)