生成图片(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());

}



相关文章
|
7月前
|
人工智能 搜索推荐
StableIdentity:可插入图像/视频/3D生成,单张图即可变成超人,可直接与ControlNet配合使用
【2月更文挑战第17天】StableIdentity:可插入图像/视频/3D生成,单张图即可变成超人,可直接与ControlNet配合使用
119 2
StableIdentity:可插入图像/视频/3D生成,单张图即可变成超人,可直接与ControlNet配合使用
java代码绘制生成图片(用于多张图片合成)
java代码绘制生成图片(用于多张图片合成)
1907 0
|
2月前
|
计算机视觉 Python
Python实用记录(一):如何将不同类型视频按关键帧提取并保存图片,实现图片裁剪功能
这篇文章介绍了如何使用Python和OpenCV库从不同格式的视频文件中按关键帧提取图片,并展示了图片裁剪的方法。
86 0
|
2月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
129 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
7月前
|
Android开发
Android Studio入门之图像显示解析及实战(附源码 超详细必看)(包括图像视图、图像按钮、同时展示文本与图像)
Android Studio入门之图像显示解析及实战(附源码 超详细必看)(包括图像视图、图像按钮、同时展示文本与图像)
291 1
|
7月前
|
机器学习/深度学习 文字识别 数据安全/隐私保护
Python实现从PDF和图片提取文字的方法总结
Python实现从PDF和图片提取文字的方法总结
461 0
|
7月前
【从800+CSDN支持的Emoji表情中筛选出文章标题可用的 1️⃣ 2️⃣ 4️⃣ 个表情并进行分类】(文章标题如何使用Emoji表情)⚽️
【从800+CSDN支持的Emoji表情中筛选出文章标题可用的 1️⃣ 2️⃣ 4️⃣ 个表情并进行分类】(文章标题如何使用Emoji表情)⚽️
98 0
|
7月前
|
计算机视觉
OpenCV中读取、显示、保存图像及获取图像属性操作讲解及演示(附源码)
OpenCV中读取、显示、保存图像及获取图像属性操作讲解及演示(附源码)
371 0
|
异构计算 Python
Python3,1行代码,去除图片的背景图,确实香。
Python3,1行代码,去除图片的背景图,确实香。
35800 0
Python3,1行代码,去除图片的背景图,确实香。
|
机器学习/深度学习 算法 计算机视觉
图像特征提取(上)| 学习笔记
快速学习图像特征提取(上),介绍了图像特征提取(上)系统机制, 以及在实际应用过程中如何使用。
图像特征提取(上)| 学习笔记