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

}



相关文章
|
9月前
|
人工智能 搜索推荐
StableIdentity:可插入图像/视频/3D生成,单张图即可变成超人,可直接与ControlNet配合使用
【2月更文挑战第17天】StableIdentity:可插入图像/视频/3D生成,单张图即可变成超人,可直接与ControlNet配合使用
217 2
StableIdentity:可插入图像/视频/3D生成,单张图即可变成超人,可直接与ControlNet配合使用
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
Manga Image Translator:开源的漫画文字翻译工具,支持多语言翻译并嵌入原图,保持漫画的原始风格和布局
Manga Image Translator 是一款开源的漫画图片文字翻译工具,支持多语言翻译并能将翻译后的文本无缝嵌入原图,保持漫画的原始风格和布局。该工具基于OCR技术和深度学习模型,提供批量处理和在线/离线翻译功能。
125 14
Manga Image Translator:开源的漫画文字翻译工具,支持多语言翻译并嵌入原图,保持漫画的原始风格和布局
|
3月前
|
API
图片转ASCII图片(像素图,艺术图)免费API接口教程
此API可将指定图片转换为ASCII风格或像素风格图片。支持POST/GET请求,需提供用户ID、KEY及图片等参数,可选设置背景色、文本色、图片宽度、灰度及风格。返回状态码、提示信息及图片地址。示例及详情见官网。
|
9月前
|
Android开发
Android Studio入门之图像显示解析及实战(附源码 超详细必看)(包括图像视图、图像按钮、同时展示文本与图像)
Android Studio入门之图像显示解析及实战(附源码 超详细必看)(包括图像视图、图像按钮、同时展示文本与图像)
331 1
|
9月前
|
存储 计算机视觉 C++
OpenCV(十四):ROI区域截取
OpenCV(十四):ROI区域截取
400 0
|
人工智能 编解码
Photoshop的AI功能上新:截图→背景填充一气呵成,再也不怕没拍全了
Photoshop的AI功能上新:截图→背景填充一气呵成,再也不怕没拍全了
167 0
|
前端开发
如何实现一个图片的伪预览效果
如何实现一个图片的伪预览效果
83 0
|
缓存 iOS开发 MacOS
万能动态滤镜GIF框架想不想要的?
Wintersweet是一款快速让控件播放GIF和添加过滤器的框架。
python 如何绘制动图(将300张图片生成gif动画)
最近,在绘制SST月均数据时,突然想看看近几十年sst的大致变化过程。说白了就是绘制一张gif动画,也算是学习过程啦。
python 如何绘制动图(将300张图片生成gif动画)
|
Java
全网首发:JDK绘制文字:六、字符对应的字体图像加载流程
全网首发:JDK绘制文字:六、字符对应的字体图像加载流程
110 0