生成图片(VerifyCode 类)|学习笔记-阿里云开发者社区

开发者社区> 学堂小助手> 正文

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

}



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10062 0
Silverlight之ListBox/Style学习笔记--ListBox版的图片轮换广告
ListBox是一个很有用的控件,其功能直逼Asp.Net中的Repeater,它能实现自定义数据项模板,纵向/横向排列Item(如果扩展一下实现自行折行,几乎就是SL版的Repeater了--实际上WrapPanel已经实现了,不过没有默认集成在SL3中).
840 0
SAP Leonardo图片处理相关的机器学习服务在SAP智能服务场景中的应用
本文作为Jerry最近正在做的一个项目的工作思路的梳理。 我们假设这样一个服务场景,技师上门维修某设备,发现设备上某零件损坏了,假设这位技师由于种种原因,没能根据自己的经验识别出这个零件的型号。此时技师掏出自己的手机,给零件拍摄一张图片,这张图片通过手机上安装的SAP某智能解决方案,传送到SAP Leonardo平台,通过那里的人工智能服务,自动识别出这张图片上面零件的准确型号,返回给技师。
724 0
sublime生成html骨架|学习笔记
快速学习 sublime生成html骨架
23 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13875 0
1394
文章
0
问答
来源圈子
更多
技术图谱:由专家组参与技术图谱的绘制与编写,知识与实践的结合让开发者们掌握学习路线与逻辑,快速提升技能 电子书:电子书由阿里内外专家打造,供开发者们下载学习,更与课程相结合,使用户更易理解掌握课程内容 训练营:学习训练营 深入浅出,专家授课,带领开发者们快速上云 精品课程:汇集知识碎片,解决技术难题,体系化学习场景,深入浅出,易于理解 技能自测:提供免费测试,摸底自查 体验实验室:学完即练,云资源免费使用
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载