发布时间:2018-03-31作者:laosun阅读(12635)
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>
到此为止。 可直接测试
版权属于: 技术客
原文地址: https://www.sunjs.com/article/detail/960f292ddc824655b058920cb1ff58be.html
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。