java產生二維碼

來源:互聯網
上載者:User

標籤:stat   oat   二維碼   orm   you   width   void   exist   bitmatrix   

<!-- pom引入jar包 -->
<!-- 二維碼產生 -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.1.0</version>
</dependency>
 
package com.zhx.util;import com.google.zxing.BarcodeFormat;import com.google.zxing.EncodeHintType;import com.google.zxing.MultiFormatWriter;import com.google.zxing.common.BitMatrix;import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;import sun.misc.BASE64Encoder;import javax.imageio.ImageIO;import java.awt.*;import java.awt.geom.RoundRectangle2D;import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;import java.io.File;import java.util.Hashtable;//二維碼產生工具類public class ErweimaUtil {        private static final String CHARSET = "utf-8";      private static final String FORMAT_NAME = "JPG";      // 二維碼尺寸      private static final int QRCODE_SIZE = 300;      // LOGO寬度      private static final int WIDTH = 60;      // LOGO高度      private static final int HEIGHT = 60;         public static void main(String[] args) {        try {            BufferedImage img = createImage("該公司沒有信用名片",null,true);                        String b64 = bfimgToBase64(img);            System.out.println("data:image/png;base64,"+b64);                    } catch (Exception e) {            e.printStackTrace();        }    }        //把圖片存入字元流    public static BufferedImage createImage(String content,String imgPath,boolean needCompress) throws Exception {        Hashtable hints = new Hashtable();          hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);          hints.put(EncodeHintType.CHARACTER_SET, CHARSET);          hints.put(EncodeHintType.MARGIN, 1);          BitMatrix bitMatrix = new MultiFormatWriter().encode(content,                  BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, hints);          int width = bitMatrix.getWidth();          int height = bitMatrix.getHeight();          BufferedImage image = new BufferedImage(width, height,                  BufferedImage.TYPE_INT_RGB);          for (int x = 0; x < width; x++) {              for (int y = 0; y < height; y++) {                  image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000                          : 0xFFFFFFFF);              }          }        if(imgPath == null || "".equals(imgPath)){            return image;        }        ErweimaUtil.insertImage(image,imgPath,needCompress);                return image;      }     //把圖片字元流轉成base64    public static String bfimgToBase64(BufferedImage bufferedImage){        String imgBase64 = null;        try {            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();            ImageIO.write(bufferedImage, "jpeg", outputStream);            BASE64Encoder encoder = new BASE64Encoder();            imgBase64 = encoder.encode(outputStream.toByteArray()).trim().replaceAll("\\s", "").replaceAll("\r", "").replaceAll("\n", "");        } catch (Exception e) {            e.printStackTrace();        }        return imgBase64;    }    public static void insertImage(BufferedImage source, String imgPath,                                    boolean needCompress) throws Exception {        File file = new File(imgPath);        if (!file.exists()) {            System.err.println(""+imgPath+"   該檔案不存在!");            return;        }        Image src = ImageIO.read(new File(imgPath));        int width = src.getWidth(null);        int height = src.getHeight(null);        if (needCompress) { // 壓縮LOGO            if (width > WIDTH) {                width = WIDTH;            }            if (height > HEIGHT) {                height = HEIGHT;            }            Image image = src.getScaledInstance(width, height,                    Image.SCALE_SMOOTH);            BufferedImage tag = new BufferedImage(width, height,                    BufferedImage.TYPE_INT_RGB);            Graphics g = tag.getGraphics();            g.drawImage(image, 0, 0, null); // 繪製縮小後的圖            g.dispose();            src = image;        }        // 插入LOGO        Graphics2D graph = source.createGraphics();        int x = (QRCODE_SIZE - width) / 2;        int y = (QRCODE_SIZE - height) / 2;        graph.drawImage(src, x, y, width, height, null);        Shape shape = new RoundRectangle2D.Float(x, y, width, width, 6, 6);        graph.setStroke(new BasicStroke(3f));        graph.draw(shape);        graph.dispose();    }    } 
//controll調用
@RequestMapping("/toGenerateQrCode") public ModelAndView toGenerateQrCode(String sellers_id, String goods_id, ModelAndView modelAndView) throws Exception { BufferedImage image = null; if("".equals(goods_id) || goods_id == null){ image = ErweimaUtil.createImage("123456","",true); }else { image = ErweimaUtil.createImage("789","",true); } String b64 = ErweimaUtil.bfimgToBase64(image);//轉成base64 String qrcode = "data:image/png;base64," + b64;//圖片url modelAndView.addObject("qrcode",qrcode); modelAndView.addObject("goods_id",goods_id); modelAndView.addObject("sellers_id",sellers_id); modelAndView.setViewName("/resellerGoods/goodsQrCode"); return modelAndView; }
<!DOCTYPE html><html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"><head>    <meta charset="UTF-8"/>    <title>二維碼圖片</title>    <div th:replace="head"></div></head><body><div id="qrCode">    <image th:src="${qrcode}"></image></div>//二維碼地址<a th:href="${qrcode}" download="二維碼.jpg">下載二維碼</a></body></html>

 

java產生二維碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.