用qr生成带logo的二维码

阅读更多
需求描述:开发的android版本应用 需要在pc端提供二维码下载路径扫描
下面是功能实现: 需要jar包:Qrcodeen.jar
先实现二维码生成:

public void create_image(String sms_info,String filePath,String logoPath)throws Exception{
        try{
                  Qrcode testQrcode =new Qrcode();
                  testQrcode.setQrcodeErrorCorrect('M');
                  testQrcode.setQrcodeEncodeMode('B');
                  testQrcode.setQrcodeVersion(7);
                  String testString = sms_info;
                  byte[] d = testString.getBytes("gbk");
                  System.out.println(d.length);
                  //BufferedImage bi = new BufferedImage(98, 98, BufferedImage.TYPE_INT_RGB);
                  BufferedImage bi = new BufferedImage(98, 98, BufferedImage.TYPE_BYTE_BINARY);
                  Graphics2D g = bi.createGraphics();
                  g.setBackground(Color.WHITE);
                  g.clearRect(0, 0, 98, 98);
                  g.setColor(Color.BLACK);
                 
                  // 限制最大字节数为120
                  if (d.length>0 && d.length <120){
                      boolean[][] s = testQrcode.calQrcode(d);
                      for (int i=0;i                          for (int j=0;j                              if (s[j][i]) {
                                  g.fillRect(j*2+3,i*2+3,2,2);
                              }
                          }
                      }
                  }
                  g.dispose();
                  bi.flush();
                  File f = new File(filePath);
                  if(!f.exists()){
                      f.mkdirs();
                  }
                  //创建图片
                  ImageIO.write(bi, "jpg", f);
                  overlapImage(filePath, logoPath);//这里是把logo加入到图片中
                 
              } // end try
              catch (Exception e) {
                  e.printStackTrace();
              } // end catch
       }

然后是加入logo图片的方法:
这里没有搞算法,直接把图片像素位置写死了的
private  void overlapImage(String bigPath, String smallPath) {
        try {
          BufferedImage big = ImageIO.read(new File(bigPath));
          BufferedImage small = ImageIO.read(new File(smallPath));
          Graphics2D g = big.createGraphics();
          g.drawImage(small, 40, 40, 20, 20, null);
          g.dispose();
          ImageIO.write(big, "jpg", new File(bigPath));
        } catch (Exception e) {
          e.printStackTrace();
        }
    }

你可能感兴趣的:(qrcode,二维码,图片)