登录注册的时候都会有图片验证,这是为了防止暴力破解和恶意注册。写一个思路来实现验证图片的实现,只是一个思路,随机生成文字并没有写。

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; import javax.imageio.ImageIO; public class Image {
public static void main(String[] args) throws FileNotFoundException, IOException{
//得到图片缓冲区
BufferedImage bi=new BufferedImage(150,70, BufferedImage.TYPE_INT_RGB);
//得到画笔
Graphics2D g2=(Graphics2D) bi.getGraphics();
//填充背景
g2.setColor(Color.WHITE);
g2.fillRect(0, 0, 150, 70);
//设置边框
g2.setColor(Color.RED);
g2.drawRect(0, 0, 149, 69);
//向图片上写字符串
  g2.setFont(new Font("宋体", Font.BOLD, 10));
g2.setColor(Color.BLACK);
g2.drawString("grup", 19, 20);
ImageIO.write(bi, "JPEG", new FileOutputStream("f:/g.jpg"));
}
}

可以做的文章有,第一是随机生成字符,第二随机生成颜色,第三随机生成干扰线,第四随机生成字体,第五随机生成字号等等

网页登录的时候需要图片验证,今天刚好用到,把之前没有做的东西补充上来。

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random; import javax.imageio.ImageIO; public class VerifyCode {
//设置宽
private int w=;
//设置高
private int h=;
private Random r=new Random();
//字体
private String[] fontNames={"宋体","华文楷体","黑体","微软雅黑","楷体_GB2312"};
//字符
private String codes="23456789abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
//背景颜色
private Color bgColor=new Color(, , );
//图片文字
private String text;
//生成随机数
private Color randomColor(){
int red=r.nextInt();
int green=r.nextInt();
int blue=r.nextInt();
return new Color(red,green,blue);
}
//生成随机字体
private Font randomFont(){
int index=r.nextInt(fontNames.length);
String fontName=fontNames[index];
int style=r.nextInt();
int size=r.nextInt()+;
return new Font(fontName, style, size);
}
//生成随机字符
private char randomChar(){
int index=r.nextInt(codes.length());
return codes.charAt(index);
}
//生成空白图片
private BufferedImage createImage(){
BufferedImage image=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
Graphics2D g2=(Graphics2D)image.getGraphics();
g2.setColor(this.bgColor);
g2.fillRect(, , w, h);
return image;
}
//生成随机乱线
private void drawLine(BufferedImage image){ int num=;
Graphics2D g2=(Graphics2D)image.getGraphics();
for(int i=;i<;i++){
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);
} }
//将图片输出到某个输出流中
public static void output(BufferedImage image,OutputStream out) throws IOException{
ImageIO.write(image, "JPEG",out);
}
//得到图片上的文字
public String getText(){
return text;
}
//得到图片
public BufferedImage getImage(){
BufferedImage image=createImage();
Graphics2D g2=(Graphics2D)image.getGraphics();
StringBuilder sb=new StringBuilder();
for(int i=;i<;i++){
String s=randomChar()+"";
sb.append(s);
float x=i*1.0F*w/;
g2.setFont(randomFont());
g2.setColor(randomColor());
g2.drawString(s, x, h-);
}
this.text=sb.toString();
drawLine(image);
return image;
}
}

最新文章

  1. 分享一个单点登录、OAuth2.0授权系统源码(SimpleSSO)
  2. http 状态码
  3. 让LinqToSQL使用Web.Config中的链接字符串(修改Settings.Designer.cs)
  4. LeetCode Rectangle Area (技巧)
  5. 【转】牛逼闪闪的Ruby迭代器
  6. opencv基础知识-videowriter
  7. 揭开.NET消息循环的神秘面纱(GetMessage()无法取得任何消息,就会进入Idle(空闲)状态,进入睡眠状态(而不是Busy Waiting)。当消息队列不再为空的时候,程序会自动醒过来)
  8. 短信,微信API(还能发邮件,短信,IM聊天)
  9. JavaScript ----------- 组合继承
  10. POJ 1475 Pushing Boxes 搜索- 两重BFS
  11. [国嵌攻略][098][Linux内核简介]
  12. createjs绘制扇形的方法
  13. 【python标准库模块三】Os模块和Sys模块学习
  14. SpringMVC 实现文件上传与下载,并配置异常页面
  15. POJ - 3264——Balanced Lineup(入门线段树)
  16. leetcode 381.Insert Delete GetRandom
  17. Flutter常用组件(Widget)解析-Scaffold
  18. 大杂烩 -- equals、hashCode联系与区别
  19. windows上dubbo-admin的安装
  20. 以双斜杠//开头的URL的含义

热门文章

  1. 2017-2018-2 20165206 实验三 《敏捷开发与XP实践》实验报告
  2. Spring Boot 导出Excel表格
  3. springcloud feign传输List的坑
  4. MQ消息队列之MSMQ
  5. SP3734 PERIODNI - Periodni
  6. 【Android】Android apk默认安装位置设置
  7. Oracle impdp的ignore及 fromuser / touser 功能
  8. 通过impala更改Kudu表属性
  9. php 操作数据库
  10. P1101 单词方阵 简单dfs