生成带logo的二维码图片

来源:互联网 发布:zanti网络渗透工具 编辑:程序博客网 时间:2024/05/01 16:28
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.swetake.util.Qrcode;

public class QrcodeTest {
    
    
    /**
     * 生成二维码图片
     * @param content 二维码内容
     * @param imgPath 二维码生成的图片路径
     * @param imgs 二维码中logo图片
     * @throws IOException
     */
    public static void generateQrcode(String content,String imgPath,int size,String imgs) throws IOException{
         BufferedImage bufImg = null;  
            try {  
                Qrcode qrcodeHandler = new Qrcode();  
                // 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小  
                qrcodeHandler.setQrcodeErrorCorrect('M');  
                qrcodeHandler.setQrcodeEncodeMode('B');  
                // 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大    1: 21*21  取值每加1尺寸加4  2: 25*25
                qrcodeHandler.setQrcodeVersion(7);  
                // 获得内容的字节数组,设置编码格式  
                byte[] contentBytes = content.getBytes("utf-8");  
                // 图片尺寸  
                int imgSize = 67 + 12 * (size - 1);  
                bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB);  
                Graphics2D gs = bufImg.createGraphics();  
                // 设置背景颜色  
                gs.setBackground(Color.WHITE);  
                gs.clearRect(0, 0, imgSize, imgSize);  
      
                // 设定图像颜色> BLACK  
                gs.setColor(Color.BLACK);  
                // 设置偏移量,不设置可能导致解析出错  
                int pixoff = 2;  
                // 输出内容> 二维码  
                if (contentBytes.length > 0 && contentBytes.length < 800) {  
                    boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);  
                    for (int i = 0; i < codeOut.length; i++) {  
                        for (int j = 0; j < codeOut.length; j++) {  
                            if (codeOut[j][i]) {  
                                gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);  
                            }  
                        }  
                    }  
                } else {  
                    throw new Exception("QRCode content bytes length = " + contentBytes.length + " not in [0, 800].");  
                }  
                
                //绘制二维码中间的图片 start
                BufferedImage images=ImageIO.read(new File(imgs));
                gs.drawImage(images, imgSize/2-7, imgSize/2-7, 14, 14, null);
                //绘制二维码中间的图片 end
                
                File imgFile = new File(imgPath);  
                // 生成二维码QRCode图片  
                ImageIO.write(bufImg, "png", imgFile);
                gs.dispose();  
                bufImg.flush();  
            } catch (Exception e) {  
                e.printStackTrace();  
            }      
    }
    public static void main(String[] args) throws IOException {
        generateQrcode("恭喜,二维码生成成功了","C:\\Users\\Administrator\\Desktop\\haha.png",7,"C:\\Users\\Administrator\\Desktop\\favicon.png");
    }
}
0 0
原创粉丝点击