HttpServlet动态生成图像
Java动态生成图像使用了BufferedImage和Graphics2D.
HttpServlet根据请求内容动态生成图像的代码如下:
OutputStream out = response.getOutputStream();
Font font = new Font("微软雅黑", Font.BOLD, 19);
int sigW = 20;
int sigH = 26;
String count = request.getParameter("count");
if (count == null || count.equals(""))
{
count = "1";
}
int num = count.length();
// 声明绘制的BufferedImage
BufferedImage img = new BufferedImage(num * (sigW + 1), sigH, BufferedImage.TYPE_INT_RGB);
// 由上面的BufferedImage获得Graphics2D画布
Graphics2D g = (Graphics2D) img.getGraphics();
// 将画布的绘制颜色设置为黑色
g.setColor(Color.black);
// 在画布上绘制一个矩形
g.fillRect(0, 0, num * (sigW + 1), sigH);
// 将画布的绘制颜色设置为白色
g.setColor(Color.white);
// 设置画布的Font属性
g.setFont(font);
// 循环在画布上绘制request中的每一个字符
for (int i = 0; i < count.length(); i++)
{
g.drawString(count.charAt(i) + "", (sigW + 1) * i, 19);
// 绘制一条竖线分割
g.drawLine((sigW + 1) * i + sigW, 0, (sigW + 1) * i + sigW, sigH);
}
// 利用ImageIO将图像输出到response的OutputStream
ImageIO.write(img, "jpg", out);
【说明】
上面使用了ImageIO将绘制得到的BufferedImage输出给了response的输出流,从而发送给浏览器,除了使用ImageIO之外,还可以使用JPEGImageEncoder来实现上面的过程,具体实现如下:
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(img);