package cn.hncu.img;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import org.junit.Test;
public class imgDemo {
@Test
// 学习如何吧一个字符串写到一个文件
public void ImgDemo1() throws FileNotFoundException, IOException {
BufferedImage img = new BufferedImage(60, 30,
BufferedImage.TYPE_INT_RGB);
Graphics g = img.getGraphics();// 获得画板
g.drawString("Hello", 0, 10);
g.dispose();// 功能相当于flush();
ImageIO.write(img, "JPEG", new FileOutputStream("d:/a/a.jpg"));
}
// 把上面的字符串改成平常用的验证码--生成几个随机数字,有背景色,有干扰线
@Test
public void ImgDemo2() throws FileNotFoundException, IOException {
int width = 70;
int height = 40;
BufferedImage img = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics g = img.getGraphics();// 获得画板
// 设置背景色
g.setColor(Color.white);
g.fillRect(0, 0, width, height);// 画背景
// 设置字体
g.setFont(new Font("黑体", Font.BOLD, 18));
// 设置随机数字
Random r = new Random();
for (int i = 0; i < 4; i++) {
int a = r.nextInt(10);// 10个随机数字
int y = r.nextInt(20) + 10; // 10~30范围内的一个整数,作为y坐标
Color c = new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255));
g.setColor(c);
g.drawString("" + a, 5 + i * 15, y);
}
// 干扰线
for (int i = 0; i < 10; i++) {// 设置10条干扰线
Color c = new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255));
g.setColor(c);
g.drawOval(0, 0, width, height);
g.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width),
r.nextInt(height));
}
g.dispose();// 功能相当于flush();
ImageIO.write(img, "JPEG", new FileOutputStream("d:/a/a.jpg"));
}
@Test
// 可以旋转和放缩的验证码
public void ImgDemo3() throws FileNotFoundException, IOException {
int width = 80;
int height = 40;
BufferedImage img = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics g = img.getGraphics();
Graphics2D g2d = (Graphics2D) g;
g2d.setFont(new Font("黑体", Font.BOLD, 20));
Random r = new Random();
for (int i = 0; i < 4; i++) {
String str = "" + r.nextInt(10);
AffineTransform aff = new AffineTransform();//旋转函数(AffineTransform)
aff.rotate(Math.random(), i * 20, height - 5);//旋转角度
aff.scale(0.6 + Math.random(), 0.6 + Math.random());
g2d.setTransform(aff);
g2d.drawString(str, 5 + i * 15, height - 5);
}
g2d.dispose();// 类似于流中的close()带动flush()---把数据刷到img对象当中
ImageIO.write(img, "JPEG", new FileOutputStream("d:/a/a.jpg"));
}
}
java---验证码图片的生成
最新推荐文章于 2024-04-27 10:33:44 发布