生成图片(VerifyCode 类)|学习笔记

简介: 快速学习生成图片(VerifyCode 类)

开发者学堂课程【JSP 快速入门生成图片(VerifyCode 类)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/33/detail/717


生成图片(VerifyCode 类)


内容简介:


1) 动态生成图片的基本步骤

2) BufferedImage 的构造

3) 范例:动态生成图片

4) 动态生成图片的源码

5) 测试源码


动态生成图片的基本步骤

1. 创建图片缓冲区

2. 设置其宽高

3. 得到图片的绘制环境(得到画笔)

4. 保存起来


BufferedImage 的构造

BufferedImage(int width, int height, intimageType)

构造一个类型为预定义图像类型之一的  BufferedImage。


范例:动态生成图片

BufferedImage bi = new BufferedImage (70, 35, BufferedImage. TYPE INT RGB);

Graphics2D g=(Graphics2D)bi.getGraphics();//得到绘制环境

g.setColor(Color.WHITE);//把环境设置为白色

g.fillRect(0,0,70,35);//填充矩形,从0,0点开始,宽70,高35,即整个图片,即为图片设置背景色

g.setColor(Color.RED);//把环境设置为红色

g.drawstring("Hello",2,35-2);//向图片上写入字符串,其中2,2表示x,y轴的坐标

ImageIo. write(bi, "JPEG", new FileOutputStream("F:/xxx.jpg"));

结果为:图片17.png


动态生成图片的源码


package cn.itcast.image;

import java.awt.BasicStroke;

public class VerifyCode {

private int w= 70;

private int h=35;

private Random r = new Random();

//《"宋体","华文楷体","黑体","华文新魏","华文隶书","微软雅黑","楷体_GB2312");

private String[] fontNames ={"宋体","华文楷体","黑体","微软雅黑","楷体_GB2312"};

//可选字符

private String codes = "23456789abcdefghj kmnopqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ";

//背景色

private Color bgColor = new Color (255, 255, 255);

//验证码上的文本

private string text;

//生成随机的颜色

private Color randomColor () {

int red=r.nextInt(150);

int green = r.nextInt(150);

int blue = r.nextInt(150);

return new Color(red, green, blue);

}

//生成随机的字体

private Font randomFont (){

int index = r.nextInt(fontNames.length);

String fontName=fontNames[index];//生成随机的字体名称

int style=r.nextInt(4);//生成随机的样式,0(无样式),1(粗体),2(斜体),3(粗体+斜体)

int size=r.nextInt(5)+24;//生成随机字号,24-28

return new Font (fontName, style, size);

}

//画干扰线

private void drawLine (BufferedImage image) {

int num = 3;//一共画3条

Graphics2D g2 = (Graphics2D)image.getGraphics();

for(int i = 0; i < num; i++) {//生成两个点的坐标,即4个值

int x1=r.nextInt(w);

int y1=r.nextInt(h);

int x2=r.nextInt(w);

int y2=r.nextInt(h);

g2.setstroke(new BasicStroke(1.5F));

g2.setColor(Color.BLUE);//干扰线是蓝色

g2.drawLine(x1,y1,x2,y2);//画线

}

}

//随机生成一个字符

private char randomChar(){

int index=r.nextInt(codes.length());

return codes.charAt(index);

}

//创建BufferedImage

private BufferedImage createImage () {

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

Graphics2D g2=(Graphics2D)image.getGraphics();

g2.setColor(this.bgColor);

g2. fillRect (0, 0, w, h);

return image;

}

//调用这个方法得到验证码

public BufferedImage getImage () {

BufferedImageimage=createImage()://创建图片缓冲区

Graphics2D g2=(Graphics2D)image.getGraphics()://得到绘制环境

StringBuilder sb=new StringBuilder()://用来装载生成的验证码文本

// 向图片中画4个字符

for(int i=0;1<4;i++) {//循环四次,每次生成一个字符

String s=randomChar()+"";//随机生成一个字母

sb.append(s);//把字母添加到ab中

float x=1*1.0F*w/4;//设置当前字符的x轴坐标

g2.setFont(randomFont());//设置随机字体

g2.setColor(randomColor());//设置随机颜色

g2.drawString(s,x,h-5);//画图

}

this.text=sb.toString();//把生成的字符串赋给了this.text

drawLine(image)://添加干扰线

return image;

}//返回验证码图片上的文本

public String getText

return text;

//保存图片到指定的输出流

public static void output (BufferedImage image, OutputStream out)

throws IOException {

ImageIo.write(image, "JPEG", out);

}

}


测试源码

@Test

public void fun2() throws FileNotFoundException, IOException {

VerifyCode vc = new VerifyCode();

BufferedImage bi = vc.getImage();

VerifyCode.output(bi,new FileOutputStream("F:/xxx.jpg"));

System.out.println(vc.getText());

}



相关文章
java代码绘制生成图片(用于多张图片合成)
java代码绘制生成图片(用于多张图片合成)
1857 0
|
5月前
|
计算机视觉 Python
|
11月前
Photoshop怎么实现图片局部马赛克
Photoshop怎么实现图片局部马赛克
83 0
|
Java
Java实现拼图小游戏(7)——查看完整图片(键盘监听实例2)
由于在移动和图片中我们已经添加了键盘监听,也继承了键盘监听的接口,那么我们只需要在重写方法内输入我们的代码即可
207 0
python 如何绘制动图(将300张图片生成gif动画)
最近,在绘制SST月均数据时,突然想看看近几十年sst的大致变化过程。说白了就是绘制一张gif动画,也算是学习过程啦。
python 如何绘制动图(将300张图片生成gif动画)
|
开发者
图像和视频中的颜色(上)| 学习笔记
快速学习图像和视频中的颜色(上),介绍了图像和视频中的颜色(上)系统机制, 以及在实际应用过程中如何使用。
138 0
图像和视频中的颜色(上)| 学习笔记
|
存储 编解码 计算机视觉
图像和视频中的颜色(下)| 学习笔记
快速学习图像和视频中的颜色(下),介绍了图像和视频中的颜色(下)系统机制, 以及在实际应用过程中如何使用。
209 0
图像和视频中的颜色(下)| 学习笔记
|
Java
全网首发:JDK绘制文字:六、字符对应的字体图像加载流程
全网首发:JDK绘制文字:六、字符对应的字体图像加载流程
91 0
|
Java
全网首发:JDK绘制文字:四、绘制文字的具体函数分析
全网首发:JDK绘制文字:四、绘制文字的具体函数分析
95 0
|
JSON 人工智能 算法
第二节课——【分割抠图功能讲解及演示】|学习笔记
快速学习第二节课——【分割抠图功能讲解及演示】
293 0