package com.service;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Service;
import com.dao.oracle.GraphicsCodeDao;
import com.secure.check.CheckParam;
@Service("cmd20101")
public class Cmd20101Service extends AbstractService {
@Resource
private CheckParam checkParam;
@Resource
private GraphicsCodeDao gCodeDao;
@Override
public Map<String, Object> doService(HttpServletRequest request) {
logger.info("[20101] 获取图形验证码 : " + checkParam.getPostParams(request));
Map<String,Object> data = new HashMap<String,Object>();
data.put("result", "1");
data.put("data",null);
try {
String sCode = gCodeDao.getCode(request.getParameter("mobilephone"));
if (sCode != null) {
data.put("result", "0");
data.put("data", getGraphicsCode(sCode));
}
} catch (Exception e) {
logger.error("[20101Error] 获取图形验证码 : " + e.getMessage());
}
return data;
}
@Override
public Map<String, Object> doValid(HttpServletRequest request) {
Map<String, String> validData = new HashMap<String, String>();
validData.put("mobilephone", "手机号码不能为空");
return super.doValid(request, validData);
}
private String getGraphicsCode(String code) throws IOException {
BufferedImage image = new BufferedImage(43, 18, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
g.setColor(Color.yellow); // 设置背景色
g.fillRect(1, 1, 41, 16);
g.setColor(Color.black); // 设置字体色
// 输出数字
for (int i = 0; i < 4; i ++ ) {
char c = code.charAt(i);
g.drawString(c + "", i * 7 + 8, 13);
}
BASE64Encoder base64 = new BASE64Encoder();
ByteArrayOutputStream bs = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", bs);
String result = base64.encodeBuffer(bs.toByteArray());
bs.close();
return result;
}
//base64字符串转化成图片
public static boolean GenerateImage(String imgStr)
{ //对字节数组字符串进行Base64解码并生成图片
if (imgStr == null) //图像数据为空
return false;
BASE64Decoder decoder = new BASE64Decoder();
try
{
//Base64解码
byte[] b = decoder.decodeBuffer(imgStr);
for(int i=0;i<b.length;++i)
{
if(b[i]<0)
{//调整异常数据
b[i]+=256;
}
}
//生成jpeg图片
String imgFilePath = "d://444.jpg";//新生成的图片
OutputStream out = new FileOutputStream(imgFilePath);
out.write(b);
out.flush();
out.close();
return true;
}
catch (Exception e)
{
return false;
}
}
public static void main(String[] args) {
int code = (int)(Math.random() * (9999 -1000)) + 1000; // 产生1000-9999之间的一个随机数
System.out.println("code:" + code );
String codes=String.valueOf(code);
Cmd20101Service c=new Cmd20101Service();
try {
String a=c.getGraphicsCode(codes);
System.out.println(a);
c.GenerateImage(a);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Service;
import com.dao.oracle.GraphicsCodeDao;
import com.secure.check.CheckParam;
@Service("cmd20101")
public class Cmd20101Service extends AbstractService {
@Resource
private CheckParam checkParam;
@Resource
private GraphicsCodeDao gCodeDao;
@Override
public Map<String, Object> doService(HttpServletRequest request) {
logger.info("[20101] 获取图形验证码 : " + checkParam.getPostParams(request));
Map<String,Object> data = new HashMap<String,Object>();
data.put("result", "1");
data.put("data",null);
try {
String sCode = gCodeDao.getCode(request.getParameter("mobilephone"));
if (sCode != null) {
data.put("result", "0");
data.put("data", getGraphicsCode(sCode));
}
} catch (Exception e) {
logger.error("[20101Error] 获取图形验证码 : " + e.getMessage());
}
return data;
}
@Override
public Map<String, Object> doValid(HttpServletRequest request) {
Map<String, String> validData = new HashMap<String, String>();
validData.put("mobilephone", "手机号码不能为空");
return super.doValid(request, validData);
}
private String getGraphicsCode(String code) throws IOException {
BufferedImage image = new BufferedImage(43, 18, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
g.setColor(Color.yellow); // 设置背景色
g.fillRect(1, 1, 41, 16);
g.setColor(Color.black); // 设置字体色
// 输出数字
for (int i = 0; i < 4; i ++ ) {
char c = code.charAt(i);
g.drawString(c + "", i * 7 + 8, 13);
}
BASE64Encoder base64 = new BASE64Encoder();
ByteArrayOutputStream bs = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", bs);
String result = base64.encodeBuffer(bs.toByteArray());
bs.close();
return result;
}
//base64字符串转化成图片
public static boolean GenerateImage(String imgStr)
{ //对字节数组字符串进行Base64解码并生成图片
if (imgStr == null) //图像数据为空
return false;
BASE64Decoder decoder = new BASE64Decoder();
try
{
//Base64解码
byte[] b = decoder.decodeBuffer(imgStr);
for(int i=0;i<b.length;++i)
{
if(b[i]<0)
{//调整异常数据
b[i]+=256;
}
}
//生成jpeg图片
String imgFilePath = "d://444.jpg";//新生成的图片
OutputStream out = new FileOutputStream(imgFilePath);
out.write(b);
out.flush();
out.close();
return true;
}
catch (Exception e)
{
return false;
}
}
public static void main(String[] args) {
int code = (int)(Math.random() * (9999 -1000)) + 1000; // 产生1000-9999之间的一个随机数
System.out.println("code:" + code );
String codes=String.valueOf(code);
Cmd20101Service c=new Cmd20101Service();
try {
String a=c.getGraphicsCode(codes);
System.out.println(a);
c.GenerateImage(a);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}