一.实现效果
生成数字,字母随机整合并含有随机位置的10条干扰线组成的图片存放在指定目录中,会随着程序的每一次运行而刷新.
二.具体代码
package cn.tx.demo1; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.util.Random; public class ImageCode { //数组 没有0 1 o 非常类似 容易对用户产生影响,影像体验感 细节 static String[] strs={"a","b","c","d","e","f","g","h","i","j","k","m","n","p","q","r","s","t", "u","v","w","x","y","z","2","3","4","5","6","7","8","9"}; public static void main(String[] args) throws Exception{ //大的需求:通过java代码方式生成图片(图片上含有字母或者数字或者干扰线) //例如画画 /** * 1.画板 纸 * 2.准备画笔 * 3.准备数据,随机获取四个 * 4.通过画笔吧获取数据划到画板上 * 5.生成一张真正的图片 **/ //定义图片的宽度和高度 int w=150; int h=50; //图片的类型 下为常量写法,也可写成 Int imageType =1; int imageType=BufferedImage.TYPE_INT_RGB; //1.画板,纸 JDK中,提供一个画板的类 ctrl+p 快捷查看方法参数 BufferedImage image=new BufferedImage(w,h,imageType); // 大的需求:把图片颜色修改 //先获取画笔对象 Graphics g=image.getGraphics(); //给画笔设置颜色 g.setColor(Color.yellow); //画一个填充矩(实心的)矩形 g.fillRect(0,0,w,h); //准备数据,随机取出4个 //编写for循环,循环4次 //再重新设置颜色 g.setColor(Color.red); //设置一个字体 g.setFont(new Font("楷体",Font.PLAIN,25)); //使用Random类 Random random=new Random(); int x=25; int y=25; for (int i = 0; i < 4; i++) { //每循环一次,取一个 //num值应该是随机生成的 //生成一个随机数字 按数组长度取 int num= random.nextInt(strs.length); String str=strs[num]; //每获取一个字符串,画上去 g.drawString(str,x,y); //每画一次,把x值变大 x +=25; } g.setColor(Color.GREEN); //循环十次画10个上去 for (int i = 0; i < 10; i++) { int x1=random.nextInt(30); int y1=random.nextInt(50); int x2=random.nextInt(30)+120; //原取29,现取149,第二个点永远在右侧 int y2=random.nextInt(50); //画一点干扰线 g.drawLine(x1,y1,x2,y2); } //5.把image生成到本地的磁盘上 ImageIO.write(image,"jpg",new File("E:\\test2\\aaa.jpg")); } }