zoukankan      html  css  js  c++  java
  • java Springboot 生成 二维码 +logo

    上码,如有问题或者优化,劳请广友下方留言,转载请标明出处:https://www.cnblogs.com/xikui/p/11195085.html

    如果对您有用的话,辛苦下方点下推荐吧~ 感谢

    1.工具类

    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.EncodeHintType;
    import com.google.zxing.client.j2se.MatrixToImageConfig;
    import com.google.zxing.client.j2se.MatrixToImageWriter;
    import com.google.zxing.common.BitMatrix;
    import com.google.zxing.qrcode.QRCodeWriter;
    import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
    import com.sun.org.apache.xml.internal.security.utils.Base64;
    import org.springframework.util.ResourceUtils;
    import javax.imageio.ImageIO;
    import javax.servlet.ServletOutputStream;
    import java.awt.*;
    import java.awt.geom.RoundRectangle2D;
    import java.awt.image.BufferedImage;
    import java.io.ByteArrayOutputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.HashMap;
    
    public class QrCodeUtil {
        public String createQRCode(String content,int width,int height,String path) throws IOException {
            String resultImage="";
            if(!EmptyUtils.isEmpty(content)){
                ServletOutputStream stream=null;
                ByteArrayOutputStream os=new ByteArrayOutputStream();
                @SuppressWarnings("rawtypes")
                HashMap<EncodeHintType,Comparable> hints=new HashMap<>();
                hints.put(EncodeHintType.CHARACTER_SET,"utf-8");//指定字符编码为“utf-8”
                hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);//指定二维码的纠错等级为中
                hints.put(EncodeHintType.MARGIN,2);//指定二维码边距
                try {
    
                    QRCodeWriter writer=new QRCodeWriter();
                    BitMatrix bitMatrix=writer.encode(content, BarcodeFormat.QR_CODE,width,height,hints);
                    MatrixToImageConfig config = new MatrixToImageConfig(0xFF000001, 0xFFFFFFFF);
                    BufferedImage bufferedImage= MatrixToImageWriter.toBufferedImage(bitMatrix,config);
    //                BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    //                for (int x = 0; x < width; x++) {
    //                    for (int y = 0; y < height; y++) {
    //                        bufferedImage.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
    //                    }
    //                }
                    Graphics2D g2 = bufferedImage.createGraphics();
                    g2.drawImage(ImageIO.read(ResourceUtils.getFile(path)), width / 5 * 2, height / 5 * 2, width / 5, height / 5, null); // logo.png自行设置
                    g2.setStroke(new BasicStroke(5, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
                    g2.draw(new RoundRectangle2D.Float(width / 5 * 2, height / 5 * 2, width / 5, height / 5, 20, 20));
                    g2.dispose();
                    g2.setColor(Color.white);
                    g2.setBackground(Color.white);
                    bufferedImage.flush();
                    ImageIO.write(bufferedImage,"png",os);
                    //OutputStream out = new FileOutputStream("D:\logo\abb.png"); //转码前保存图片文件到指定目录
                    //out.write(os.toByteArray());
                    resultImage=new String("data:image/png;base64,"+ Base64.encode(os.toByteArray()));
                    return resultImage;
                }catch (Exception e){
                    e.printStackTrace();
                }finally {
                    if(stream!=null){
                        stream.flush();
                        stream.close();
                    }
                }
            }
            return null;
        }
    }
    2.Controlelr
     1  @RequestMapping("/qrcode")
     2     public String qrcode(HttpServletRequest request, HttpServletResponse response) {
     3         try {
     4             QrCodeUtil qrCodeUtil=new QrCodeUtil();
     5             String  path= ResourceUtils.getURL("classpath:").getPath()+"logo/logo.png";
     6             return qrCodeUtil.createQRCode("https://www.cnblogs.com/xikui/",300,300,path);
     7         } catch (IOException e) {
     8             e.printStackTrace();
     9             return "异常";
    10         }
    11     }
    View Code

  • 相关阅读:
    作业
    Java总结
    十四周总结
    十二周课程总结
    十一周总结
    自我介绍
    第二次
    第十二周作业
    第九周作业
    第十三周课程总结
  • 原文地址:https://www.cnblogs.com/xikui/p/11195085.html
Copyright © 2011-2022 走看看