先看一段代码:

<img src="data:image/jpg;base64,/9j/iVBORw0KGgoAAAANSUhE...lFTkSuQmCC" />

那这些代码是如何生成的?

这些代码“data:image/jpg;base64,/9j/iVBORw0KGgoAAAANSUhE……” 就是一张图片的Data URL,就是利用base64编码把图片数据翻译成标准ASCII字符。

可以上http://base64decode.net/base64-image-decoder, 利用在线base64图片解码工具把其转换成图片

等同于:

<img src="http://www.oschina.net/img/logo_s2.png"/>

Data URL是在本地直接绘制图片,不是从服务器加载,所以节省了HTTP连接,起到加速网页的作用。

语法:

data:image/jpg;    声明数据协议及类型名称
base64,               编码形式为base64
/9j/iVBORw0KGgoAAAANSUhE……    base64编码结果



使用Google kaptcha 生成验证码图片

Java Servlet

public class KpServlet extends AbstractServlet
{
private Producer kpProducer = null;

@Override
public void init(ServletConfig conf) throws ServletException
{
                ......
this.kaptchaProducer = config.getProducerImpl();
}


@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
{

          resp.setContentType("image/jpeg");

          String text= this.kpProducer.createText();

          req.getSession().setAttribute("kaptcha-cookie", Util.encrypt(text, Configuration.getProperty("MD5"),   Configuration.getProperty("xxyy")));

         BufferedImage bi = this.kpProducer.createImage(text);

        String imageStr = null;

        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try 
        {
            ImageIO.write(bi, "jpeg", baos);