资料来源:https://www.bilibili.com/video/BV1Aq4y1W79E?p=4&spm_id_from=pageDriver

    1. package cn.tx.imageCode.demo;
    2. import javax.imageio.ImageIO;
    3. import java.awt.*;
    4. import java.awt.image.BufferedImage;
    5. import java.io.File;
    6. import java.io.IOException;
    7. import java.util.Random;
    8. public class ImageCode {
    9. static String [] strs = {"a", "b", "c", "d", "e", "f", "g", "h", "j", "k",
    10. "m", "n", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "2",
    11. "3", "4", "5", "6", "7", "8", "9"};
    12. public static void main(String[] args) throws IOException {
    13. // 大的需求:通过Java代码的方式生成图片(图片上含有字母或数字或者干扰线)
    14. // 如:画画一样
    15. /**
    16. * 1. 画板 纸
    17. * 2. 准备画笔
    18. * 3. 准备一条数据,随机从数组中获取4个
    19. * 4. 通过画笔把获取到的数据画到画板上
    20. * 5. 生成一张真正的图片
    21. */
    22. // 定义图片的宽度
    23. int w = 150;
    24. // 定义图片高度
    25. int h = 50;
    26. // 定义图片的类型 图片的组成方式 RGB由red、green、blue三原色组成
    27. int imageType = BufferedImage.TYPE_INT_RGB;
    28. // 1. 画板 纸 JDK中提供画板类 ctrl + p快捷键查看方法的参数
    29. BufferedImage image = new BufferedImage(w, h , imageType);
    30. // 修改图片的颜色。图片默认的颜色是黑色的
    31. // 2. 准备画笔。获取画笔对象
    32. Graphics g = image.getGraphics();
    33. // 先给画笔设置颜色
    34. g.setColor(Color.yellow);
    35. // 画填充矩形
    36. g.fillRect(0,0, w, h);// 全部填充
    37. // 再重写设置颜色(设置的是字体的颜色)
    38. g.setColor(Color.red);
    39. // 设置字体
    40. g.setFont(new Font("楷体", Font.PLAIN, 25));
    41. Random random = new Random();
    42. int x = 25;
    43. int y = 25;
    44. // 3. 准备一条数据,随机从数组中获取4个
    45. for (int i = 0; i < 4; i++) {
    46. // 取strs长度中一个随机数字
    47. int num = random.nextInt(strs.length);
    48. String str = strs[num];
    49. // 每获取一个字符串,画上去
    50. g.drawString(str, x, y);
    51. // 每画一次,把X的值变大,不然每次画的值重叠
    52. x += 25;
    53. }
    54. g.setColor(Color.green);
    55. for (int i = 0; i < 10; i++) {
    56. int x1 = random.nextInt(30);
    57. int y1 = random.nextInt(30);
    58. int x2 = random.nextInt(30) + 120;
    59. int y2 = random.nextInt(50);
    60. // 画一点干扰线
    61. g.drawLine(x1, y1, x2, y2);
    62. }
    63. // 5. 生成一张真正的图片。把image生成到本地的磁盘上
    64. ImageIO.write(image, "jpg", new File("D:\\aa.jpg"));
    65. }
    66. }