用java写图片
登录注册的时候都会有图片验证,这是为了防止暴力破解和恶意注册。写一个思路来实现验证图片的实现,只是一个思路,随机生成文字并没有写。
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;
}
}
用java写图片的更多相关文章
- Java——Image 图片合并
1.合并图片 package com.tb.image; import java.awt.Image; import java.awt.image.BufferedImage; import java ...
- JAVA之旅(三十五)——完结篇,终于把JAVA写完了,真感概呐!
JAVA之旅(三十五)--完结篇,终于把JAVA写完了,真感概呐! 这篇博文只是用来水经验的,写这个系列是因为我自己的java本身也不是特别好,所以重温了一下,但是手比较痒于是就写出了这三十多篇博客了 ...
- java多图片上传--前端实现预览--图片压缩 、图片缩放,区域裁剪,水印,旋转,保持比例。
java多图片上传--前端实现预览 前端代码: https://pan.baidu.com/s/1cqKbmjBSXOhFX4HR1XGkyQ 解压后: java后台: <!--文件上传--&g ...
- java服务器图片压缩的几种方式及效率比较
以下是测试了三种图片压缩方式,通过测试发现使用jdk的ImageIO压缩时间更短,使用Google的thumbnailator更简单,但是thumbnailator在GitHub上的源码已经停止维护了 ...
- 用 Java 写个塔防游戏「GitHub 热点速览 v.21.37」
作者:HelloGitHub-小鱼干 本周 GitHub Trending 的主题词是:多语言.本周特推的 C 语言教程是大家都知道的阮一峰编写的,想必和他之前的技术文章类似,能起到科普作用.再来时 ...
- Java中图片压缩处理
原文http://cuisuqiang.iteye.com/blog/2045855 整理文档,搜刮出一个Java做图片压缩的代码,稍微整理精简一下做下分享. 首先,要压缩的图片格式不能说动态图片,你 ...
- kafka集群搭建和使用Java写kafka生产者消费者
1 kafka集群搭建 1.zookeeper集群 搭建在110, 111,112 2.kafka使用3个节点110, 111,112 修改配置文件config/server.properties ...
- java获取图片原始尺寸
java获取图片原始尺寸 URL url = null; InputStream is = null; BufferedImage img = null; try { url = new URL(pi ...
- 利用bootstrap写图片轮播
利用bootstrap写图片轮播 缺点是轮播没有固定样式图片样式会改变外框的大小,所以要再设置 以及左右按钮的style也要从新设置 <div class="carousel slid ...
随机推荐
- gitlab使用--汉化及修改端口
汉化思路:去gitlab汉化社区下载对应的汉化版本,这个文件和当前版本对比形成一个补丁,打入到当前配置文件中 1.查看当前gitlab版本 head -1(数字) /opt/gitlab/ve ...
- WebService服务介绍与调用
一: WebService简介 WebService是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言的下的一个子集)标准来描述.发布.发现.协调 ...
- Give root password for maintenance(or type control -D to continue)
2017-09-30 18:12:08 1:错误如图,本来开机准备用一下虚拟机,就出现一个这,为啥记录一下呢,因为网上好多不是很靠谱. 原因可能是之前关闭虚拟机的时候不小心出现异常了: 2:解决办法: ...
- Echarts-各个配置项详细说明总结【转】
1.图表标题 1 title: { 2 x: 'left', // 水平安放位置,默认为左对齐,可选为: 3 // 'center' ¦ 'left' ¦ 'right' 4 // ¦ {number ...
- 关于sql和MySQL的语句执行顺序
sql和mysql执行顺序,发现内部机制是一样的.最大区别是在别名的引用上. 一.sql执行顺序 (1) from (3) join (2) on (4) where (5) group by(开始使 ...
- 【转】利用 selenium 的 webdrive 驱动 headless chrome
1.参考 使用 headless chrome进行测试 2.概念 Headless模式解决了什么问题: 自动化工具例如 selenium 利用有头浏览器进行测试,面临效率和稳定性的影响,所以出现了 H ...
- loadrunner场景报错:Error: CCI compilation error -/tmp/brr_5d65oV/netdir/E/\320\324/Action.c (318): undeclared identifier `LAST'解决思路
在windows下写的脚本编译通过 但是拿到linux agent场景执行中就会提示如下,同样的脚本在windows agent下没有任何问题 agent连的是linux负载机 通过脚本一行一行排查, ...
- SSH免密远程登陆及详解
SSH(安全外壳协议):为建立在应用层和传输层基础上的安全协议,ssh是目前较为可靠,专门为远程登陆,会话和其他网络服务提供安全 协议.利用ssh协议可以有效的防止远程管理过程中的信息泄露问题,传统的 ...
- python模块安装查看、包制作
一. 模块安装 ubuntu : apt-get install python-pip redhat: yum install python-pip pip install 模块 pip instal ...
- BZOJ3052/UOJ#58 [wc2013]糖果公园 莫队 带修莫队 树上莫队
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ3052.html 题目传送门 - BZOJ3052 题目传送门 - UOJ#58 题意 给定一棵树,有 ...