java Springboot 生成 二维码 +logo

2019-08-16 10:26:41来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

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

 


原文链接:https://www.cnblogs.com/xikui/p/11195085.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Java内存模型以及线程安全的可见性问题

下一篇:使用Optional摆脱NPE的折磨