不说什么,代码能为我解释。透明的背景重要的一点就是只能在于png格式,而不是jpg格式。

package com.shengdai.gzb.yzmcode.web;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;

import org.apache.struts2.convention.annotation.Action;
import org.springframework.stereotype.Controller;

import com.shengdai.base.support.struts.BaseStrutsAction;
@Controller
public class YzmCodeAction extends BaseStrutsAction{

/**

*/
private static final long serialVersionUID = 1L;
private static final int WIDTH=120;
private static final int HEIGHT = 30;

public YzmCodeAction() {
super();
}

@Action
public void validate() {
BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = image.createGraphics();

//1.设置背景颜色
setBackground(g);

//2.设置边框
setBorder(g);

//3.画干扰线
drawRandomLine(g);
//4.生成随机数
String codes = drawRandomNum((Graphics2D)g);

request.getSession().invalidate();
request.getSession().setAttribute("codes", codes);

//5.将图像写给浏览器
response.setContentType("image/jpeg");

//设置浏览器清除缓存
response.setDateHeader("expries", -1);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
try {
ImageIO.write(image, "png", response.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}

private String drawRandomNum(Graphics2D g) {
g.setColor(Color.BLACK);
g.setFont(new Font("楷体",Font.BOLD,25));
String base = "1234567890qwertyuiopasdfghjklzxcvbnyQWERTYUIOPASDFGHJKLZXCVBNM";
StringBuffer buffer = new StringBuffer();
int x = 5;
for(int i=0;i<4;i++){
int degree = new Random().nextInt()%30;
String ch = base.charAt(new Random().nextInt(base.length())) + "";
buffer.append(ch);
g.rotate(degree*Math.PI/180,x, 30);
g.drawString(ch, x, 25);
//必须要有 
g.rotate(-degree*Math.PI/180, x, 30);
x+=30;
}
return buffer.toString().toLowerCase();
}

private void drawRandomLine(Graphics g) {
g.setColor(Color.GRAY);
for(int i=0;i<0;i++){
int x1=new Random().nextInt(WIDTH);
int y1 =new Random().nextInt(HEIGHT);
int x2=new Random().nextInt(WIDTH);
int y2 =new Random().nextInt(HEIGHT);
g.drawLine(x1, y1, x2, y2);
}
}

private void setBorder(Graphics g) {
// g.setColor(Color.BLACK);
g.drawRect(1, 1, WIDTH-2, HEIGHT-2);
}

private void setBackground(Graphics2D g) {
//设置背景颜色
// g.setColor(Color.WHITE);
g.setColor(new Color(255, 255, 255, 0));
g.fillRect(0, 0, WIDTH, HEIGHT);
// g.getDeviceConfiguration().createCompatibleImage(WIDTH, HEIGHT, Transparency.TRANSLUCENT);
// g.dispose();
}

}

验证码及验证码透明的背景相关推荐

  1. python验证码_Python验证码登录(Tesseract安装配置)

    1.安装py库:pytesseract,PIL pip install pytesseract pip install PILLOW 如果安装时,出现权限不足: pip install --user ...

  2. 模仿黑产破解12306验证码,验证码产品的未来是?

    导读:12306验证码,长时间高居反人类产品排行榜第一名(据某网站调查),普通人一次通过率仅8%,人也识别不清的图片就能成功阻挡自动机了吗?谷歌街景验证码完全取自自然环境确保图片的不重复不被爆破,但是 ...

  3. php验证码手册,验证码_专题_帮助文档_Thinkphp手册

    验证码_专题_帮助文档_Think Think/Verify类可以支持验证码的生成和验证功能. 生成验证码 下面是最简单的方式生成验证码: seover" style=" marg ...

  4. php验证码手册,验证码 - ThinkPHP 5.1 完全开发手册

    首先使用Composer安装think-captcha扩展包: composer require topthink/think-captcha 验证码的简单用法 扩展包内定义了一些常见用法方便使用,可 ...

  5. kaptcha html页面验证码,kaptcha验证码使用(示例代码)

    效果图: kaptcha 是一个很有用的验证码生成工具.有了它,你能够生成各种样式的验证码,由于它是可配置的. kaptcha工作的原理是调用 com.google.code.kaptcha.serv ...

  6. CSS实现背景透明而背景上的文字不透明

    在我们设计制作一些网页的时候可能会用到半透明的效果,首先我们可能会想到用PNG图片处理,当然这是一个不错的办法,唯一的兼容性问题就是ie6 下的BUG,但这也不困难,加上一段js处理就行了.但假如我们 ...

  7. html控件透明与背景透明

    html控件透明与背景透明 如何实现一个控件的半透明效果? IE中关于半透明和透明控件的一些说明 .大家在有些时候希望自己做的控件是半透明或透明的,就像半透明的窗体一样,我经过一段时间的查询,发现这个 ...

  8. Python项目实战 3.1:验证码.图形验证码

    目录 一.逻辑分析 二.接口设计和定义 三.后端逻辑 四.前端逻辑 一.逻辑分析  要点 将图形验证码的文字信息保存到Redis数据库,为短信验证码做准备. UUID 用于唯一区分该图形验证码属于哪个 ...

  9. duilib修复ActiveXUI控件bug,以支持flash透明动态背景

    转载请说明原出处,谢谢~~ 昨天在QQ控件里和同学说起QQ2013登陆窗体的开发,从界面角度考虑,单单一个登陆界面是很容易做出来的.腾讯公司为了防止各种盗号行为可谓煞费苦心,QQ2013采用了动态背景 ...

最新文章

  1. 不会Python爬虫?教你一个通用爬虫思路轻松爬取网页数据,赶紧收藏!!
  2. 【华为云技术分享】MongoDB经典故障系列六:CPU利用率太高怎么办?
  3. oracle如何搜索字段类型,Oracle通过字段类型查询字段
  4. mysql索引机制_mysql索引原理详解
  5. 订单失效怎么做的_虾皮Shopee新加坡电商做什么产品好呢?订单少得可怜怎么办呢...
  6. c++程序无法进入断点的原因
  7. 工厂模式的三张类图(一目了然)
  8. 智能交通灯(根据车流量检测)
  9. 学习嵌入式必须学习32单片机吗?
  10. 基于51单片机的智能温控风扇
  11. 【保姆级入门系列】阿ken教你学Python(六) ——组合数据类型
  12. 【传感器学习】光电反射传感器
  13. 2019-11-29-win10-uwp-如何开始写-uwp-程序
  14. 痞子衡嵌入式:一表全搜罗常见低功耗广域物联网协议(NB-IoT/eMTC/LoRa/SigFox...)
  15. ipad怎样和计算机连接网络,ipad怎样连接电脑itunes
  16. 无线耳机除了苹果哪个牌子好?类似苹果耳机的蓝牙耳机推荐
  17. python event对象
  18. Python软件编程等级考试二级——20211205
  19. 万字长文解读DeepMind与谷歌的AI拉锯战
  20. 无监督的一致性聚类(consensus)的通俗理解

热门文章

  1. JAVA计算机毕业设计图书馆预约占座系统(附源码、数据库)
  2. 圆/椭圆/双曲线/抛物线等二次曲线的各种情况方程
  3. 第99篇 C++数据结构(九)散列表
  4. 全球竞争力指数提升最快城市:长沙成提升最快的10城市之一
  5. 模拟IO口简单呼吸灯程序
  6. uniapp(小程序) 配置 海康威视-萤石监控(直播替代方案) 踩坑与解决方法
  7. java 读取 application配置文件信息
  8. 恒隆地产华中首个大型商业综合体项目--武汉恒隆广场正式开幕
  9. 完整!贪吃蛇游戏c语言代码分享(包括界面,计数,提示)
  10. socket加入组播