验证码及验证码透明的背景

不说什么,代码能为我解释。透明的背景重要的一点就是只能在于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();
}

}

时间: 2024-10-13 07:31:07

验证码及验证码透明的背景的相关文章

【IOS】UISearchBar背景透明,去掉背景,自定义背景

ios6,ios7,ios7.1下设置UISearchbar的背景色 ios系统升级到7.1后,原来在7.0下显示正常的UISearchbar现在又出现问题了.究其原因,是由于UISearchbar的subview又做修改了. 1 //修改searchBar样式 2 3 - (void)changeSearchBar { 4 5 float version = [[[UIDevice currentDevice] systemVersion] floatValue]; 6 7 if ([_sea

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

在我们设计制作一些网页的时候可能会用到半透明的效果,首先我们可能会想到用PNG图片处理,当然这是一个不错的办法,唯一的兼容性问题就是ie6下的BUG,但这也不困难,加上一段js处理就行了.但假如我们需要一个半透明遮罩的弹出层,如登陆框.注册框.提示等,这时可能需要整个页面都要被半透明的遮罩层覆盖,那么如用背景平铺的话,此时此刻也许就不是一个好办法了,图片大了会影响加载速度,图片小了同样会增加页面的渲染计算量,那么这时也许就需要用CSS滤镜了. 假如有这样一个例子:“有一个DIV块,此DIV是黑色

CSS实现背景透明而背景上的文字不透明完美解决

在我们设计制作一些网页的时候可能会用到半透明的效果,首先我们可能会想到用PNG图片处理,当然这是一个不错的办法,唯一的兼容性问题就是ie6 下的BUG,但这也不困难,加上一段js处理就行了.但假如我们需要一个半透明遮罩的弹出层,如登陆框.注册框.提示等,这时可能需要整个页面都要被半透 明的遮罩层覆盖,那么如用背景平铺的话,此时此刻也许就不是一个好办法了,图片大了会影响加载速度,图片小了同样会增加页面的渲染计算量,那么这时也许就 需要用CSS滤镜了. 假如有这样一个例子:“有一个DIV块,此DIV

文字不透明,背景透明

<div class="box">文字不透明,背景透明</div> <style> *{ padding:0; margin:0; } .box{ background:rgba(255,0,0,0.5); filter:progid:DXImageTransform.Microsoft.gradient(startcolorstr=#FF8080,endcolorstr=#FF8080);/*此时的值为半透明效果后的颜色值*/ height:200

CSS实现背景透明而背景上的文字图片不透明

1.用图片则能兼容IE8和IE7 2.用颜色则不能兼容IE8和IE7,并且颜色层不能随着内容层自增长,只能设置一个固定高度 3.用颜色则颜色层不能包含内容层(图片和文字) 1 <!-- wrap最外层设置position:relative --> 2 <div class="wrap"> 3 <!-- bg为背景透明层 --> 4 <div class="bg"></div> 5 <!-- conte

ie6下:png图片不透明 和 背景图片为png的节点的内部标签单击事件不响应

1.png图片不透明 少量图片时:使用滤镜: _background:none; _filter:prodig:DXImageTransform.Microsoft.AlphaImageLoader(src="../a.png"); 注意: 测试发现如果把样式写在css文件里,而非当前页面的<style></style>里,则不会生效. 图片多时:使用js插件,可参考ie6里png图片不透明 2.背景图片为png的节点的内部标签单击事件不响应 参考张鑫旭的Jav

python web框架Flask——图形验证码及验证码的动态刷新

下列代码都是以自己的项目实例讲述的,相关的文本内容很少,主要说明全在代码注释中 自制图形验证码 这里所说的图形验证码都是自制的图形,通过画布.画笔.画笔字体的颜色绘制而成的.将验证码封装成一个类比较好管理,代码里有绝对详细的注释,当然大家可以直接复制. 里面涉及的字体都是从系统电脑上自带的,大家直接复制当前目录下就可以了. 主目录/utils/captcha/__init__.py import random import string # Image:一个画布 # ImageDraw:一个画笔

Java Swing 图形界面实现验证码(验证码可动态刷新)

import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Toolkit;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.util.Random;import javax.swing.JFrame; public class CheckCode extends JFrame {

项目分享之 验证码呀验证码

    项目经验分享详细篇之 验证码 背景:    接手的一个小项目,额,只能说,项目很小,技术很大.....往后省略1M的抱怨&埋怨  先了解了解阮一峰博主写的一篇OAuth的文章 http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html   介入正题: 以这个网站为例:  http://box.gm.163.com/self_help.html?kind_id=617 内容正在整理中..... -----404----