要点:
1.new一个BufferedImage
2.调用getGraphics()方法获得一个Graphics对象
3.再调用Graphics中的各种draw方法
4.若要实现缩放和旋转,则需把Graphics强转成 Graphics2D,然后调 Graphics2D中的rotate()方法和scale()方法
5.若要把验证码挂到网页上,则需要设置协议
resp.setContentType(“image/jpeg”); //1 ※※设置响应内容的类型为jpg图片
@Test
public void demo1() throws IOException {
BufferedImage img = new BufferedImage(60, 30,BufferedImage.TYPE_INT_RGB );
Graphics g = img.getGraphics();
g.drawString("Hello", 0, 30);版本2是扩展这一句
//把图形刷到img对象中
g.dispose();//相当于IO中的close()方法带动flush()
ImageIO.write(img, "JPEG", new FileOutputStream("d:/a/hello.jpg"));
}
----------
@Test
public void demo2() throws IOException {
int w = 60;
int h = 30;
BufferedImage img = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB );
Graphics g = img.getGraphics();
//背景
g.setColor(Color.WHITE);
g.fillRect(0, 0, w, h);
//字体
g.setFont(new Font("aa", Font.BOLD, 18));
//输出验证码: 4个0~9之间的随机整数
Random r = new Random();
for(int i=0;i<4;i++){
int a = r.nextInt(10);
int y = 10+r.nextInt(20);//上下位置:10~30
Color c = new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255));
g.setColor(c);
g.drawString(""+a, i*16, y);
}
//画干扰线
for(int i=0;i<20;i++){
Color c = new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255));
g.setColor(c);
g.drawLine(r.nextInt(w), r.nextInt(h), r.nextInt(w), r.nextInt(h));
}
//把图形刷到img对象中
g.dispose();//相当于IO中的close()方法带动flush()
ImageIO.write(img, "JPEG", new FileOutputStream("d:/a/hello.jpg"));
}
复杂验证码(旋转和缩放)
@Test
public void demo3() throws IOException {
int w = 80;
int h = 30;
BufferedImage img = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB );
Graphics g = img.getGraphics();
Graphics2D g2d = ( Graphics2D )g; // ※※※
//字体
g2d.setFont(new Font("aa", Font.BOLD, 18));
//背景
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, w, h);
//输出验证码: 4个0~9之间的随机整数
Random r = new Random();
for(int i=0;i<4;i++){
int a = r.nextInt(10);
int y = 10+r.nextInt(20);//上下位置:10~30
Color c = new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255));
g2d.setColor(c);
//旋转和放缩※※※
AffineTransform tx = new AffineTransform();
tx.rotate(r.nextDouble(), i*16, y-5);
tx.scale(0.6+r.nextDouble(), 0.6+r.nextDouble());
g2d.setTransform(tx);
g2d.drawString(""+a, i*16, y);
}
//画干扰线
for(int i=0;i<10;i++){
Color c = new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255));
g2d.setColor(c);
g2d.drawLine(r.nextInt(w), r.nextInt(h), r.nextInt(w), r.nextInt(h));
}
//把图形刷到img对象中
g2d.dispose();//相当于IO中的close()方法带动flush()
ImageIO.write(img, "JPEG", new FileOutputStream("d:/a/hello.jpg"));
}