package myBean; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import java.util.Random; import javax.imageio.ImageIO; public class ImageEnsure ... { private char mapTable[] = ...{ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; /**//* * 在os中输出一个大小为width,height的图片 * */ public String getEnsure(int width, int height, OutputStream os) ...{ if (width <= 0) width = 60; if (height <= 0) height = 20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); //画背景 g.setColor(new Color(0xDCDCDC)); g.fillRect(0, 0, width, height); //画边框 g.setColor(Color.BLACK); g.drawRect(0, 0, width - 1, height - 1); String strEnsure = ""; //生成4位验证码 for (int i = 0; i < 4; ++i) ...{ strEnsure += mapTable[(int) (mapTable.length * Math.random())]; } // 将验证码画到图片中 g.setColor(Color.BLACK); g.setFont(new Font("Atlantic Inline", Font.PLAIN, 10)); String str = strEnsure.substring(0); g.drawString(str, 8, 17); str = strEnsure.substring(1, 2); g.drawString(str, 20, 15); str = strEnsure.substring(2, 3); g.drawString(str, 35, 18); str = strEnsure.substring(3, 4); g.drawString(str, 45, 15); // 随机产生100个干扰点 Random rand = new Random(); for (int i = 0; i < 10; i++) ...{ int x = rand.nextInt(width); int y = rand.nextInt(height); g.drawOval(x, y, 1, 1); } // 释放图形上下文 g.dispose(); try ...{ ImageIO.write(image, "JPEG", os); } catch (IOException e) ...{ e.printStackTrace(); return ""; } return strEnsure; }}