Java ZXing 生成QRCode二维码的两种方式,可设置图片大小,和外白色边框大小

发布时间:2018-03-31作者:laosun阅读(12933)

Java

Java ZXing 生成QRCode二维码的两种方式,可设置图片大小,和外白色边框大小。google的zxing project 是一个很棒的,几乎可以在所有平台(Android、JavaSE、iPhone、RIM、Symbian)中可以用来生成、解析QR码的开源库。

    QRGen在ZXing基础上开发,这个库使得利用Java生成QR码变为小菜一碟。它需要依赖ZXing,所以生成图案时你同时需要ZXing和QRGen的jar包。 

    QR 码最常见的应用便是为网站中一个特定的网页或下载页带来流量。因此,QR码常常会编码URL或网站地址,用户可以通过手机摄像头扫描,并在其浏览器中打开

    大多数时候,你需要在网站上动态的生成一些QR码。我们已经看到Java中生成QR码是多么的容易。现在,我们看看如何把生成QR码集成到Java Servlet中。

    创建servlet

        import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.HashMap;
    import java.util.Map;
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import net.glxn.qrgen.QRCode;
    import net.glxn.qrgen.image.ImageType;
    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.EncodeHintType;
    import com.google.zxing.MultiFormatWriter;
    import com.google.zxing.WriterException;
    import com.google.zxing.client.j2se.MatrixToImageWriter;
    import com.google.zxing.common.BitMatrix;
     
    @SuppressWarnings("serial")
    public class QRCodeServlet extends HttpServlet {
        
        private static int type = 1; 
        
        @Override
        protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
            response.setHeader("Pragma", "No-cache");
            response.setHeader("Cache-Control", "no-cache");
            response.setDateHeader("Expires", 0);
            response.setContentType("image/png");
        
            int width = 240, height = 240;
            int margin = 5;//边框值
            if(type==1){
                //第一种写法==================================
    //            EncodeHintType.MARGIN: 边框
                ByteArrayOutputStream out = QRCode.from("https://www.sunjs.com").withHint(EncodeHintType.MARGIN, margin).to(ImageType.PNG).withSize(width, height).stream();
                OutputStream outStream = response.getOutputStream();
                outStream.write(out.toByteArray());
                outStream.flush();
                outStream.close();
            }else{
                //第二种写法==========================================
                ServletOutputStream stream = null;  
                try {
                    stream = response.getOutputStream();  
                    Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
                    hints.put(EncodeHintType.MARGIN, margin);
                    BitMatrix bm = new MultiFormatWriter().encode("https://www.sunjs.com", BarcodeFormat.QR_CODE, width, height, hints);
                    MatrixToImageWriter.writeToStream(bm, "png", stream);
                } catch (WriterException e) {
                    e.printStackTrace();
                } finally{
                    if (stream != null) {  
                        stream.flush();  
                        stream.close();  
                    }  
                }
            }
        }
    }


    pom下载jar包


    <dependency>
        <groupId>net.glxn</groupId>
        <artifactId>qrgen</artifactId>
        <version>1.4</version>
    </dependency>

    其实这个jar包也是在 com.google.zxing 的基础上开发的,引入这一个,会自动下载相关联的jar包。


    web.xml 配置


    <servlet>
        <servlet-name>QRCodeServlet</servlet-name>
        <servlet-class>com.sunjs.controller.QRCodeServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>QRCodeServlet</servlet-name>
        <url-pattern>/xxx</url-pattern>
    </servlet-mapping>


    到此为止。 可直接测试



8 +1

版权声明

 Java  源码

 请文明留言

4 条评论