Zxing方式生成vacard联系方式

测试

package com.Zxing;

public class Test {
    public static void main(String []args) throws Exception
    {
        String imgPath= "src/Fukang.gif";
        String content = "BEGIN:VCARD\n" + "VERSION:3.0\n" + "N:王雪晴\n" + "EMAIL:[email protected]\n" + "TEL:15100000000\n" + "ADR:河北省石家庄市\n" + "ORG:\n" + "TITLE:\n" + "URL:src/1.jpg\n" + "NOTE:我是一个乐观可爱的人\n" + "END:VCARD";//内容,src个人主页
        String logo = "src/1.jpg";
        ZxingUtil zxingUtil = new ZxingUtil();
        zxingUtil.eccodeImt(imgPath,"gif",content,430,430,logo);

    }
}

二维码图片logo

package com.Zxing;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class LogoUtil {
    //传入logo、二维码 ->带logo的二维码
    public  static BufferedImage logoMatrix(BufferedImage matrixImage, String logo ) throws IOException {
        //在二维码上画logo:产生一个  二维码画板
        Graphics2D g2 = matrixImage.createGraphics() ;

        //画logo: String->BufferedImage(内存)
        BufferedImage logoImg = ImageIO.read(new File(logo)) ;
        int height = matrixImage.getHeight() ;
        int width = matrixImage.getWidth();
        //纯logo图片
        g2.drawImage(logoImg  , width*2/5,height* 2/5,    width*1/5,height* 1/5  ,   null) ;

        //产生一个 画 白色圆角正方形的 画笔
        BasicStroke stroke = new BasicStroke(5,BasicStroke.CAP_ROUND ,BasicStroke.JOIN_ROUND) ;
        //将画板-画笔 关联
        g2.setStroke(stroke);
        //创建一个正方形
        RoundRectangle2D.Float round = new RoundRectangle2D.Float(width*2/5,height* 2/5,    width*1/5,height* 1/5 , BasicStroke.CAP_ROUND ,BasicStroke.JOIN_ROUND);
        g2.setColor(Color.WHITE);
        g2.draw(round);

        //灰色边框
        BasicStroke stroke2 = new BasicStroke(1,BasicStroke.CAP_ROUND ,BasicStroke.JOIN_ROUND) ;
        g2.setStroke(stroke2);
        //创建一个正方形
        RoundRectangle2D.Float round2 = new RoundRectangle2D.Float(width*2/5+2,height* 2/5+2,    width*1/5-4,height* 1/5 -4, BasicStroke.CAP_ROUND ,BasicStroke.JOIN_ROUND);
//		Color color = new Color(128,128,128) ;
        g2.setColor(Color.GRAY);
        g2.draw(round2);

        g2.dispose();
        matrixImage.flush();

        return matrixImage;

    }
}
/加密 将文字放入二维码中
package com.Zxing;

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 com.sun.prism.Image;


import javax.imageio.ImageIO;


import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Hashtable;

import java.util.Map;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

import javax.imageio.ImageIO;


public class ZxingUtil {
    private static final int BLACK = 0xFF000000;
    private static final int WHITE = 0xFFFFFFFF;
    //加密 将文字放入二维码中
    public  void eccodeImt(String imgPath,String format,String concent,int width,int heigth,String logo) throws  Exception
    {
         Hashtable <EncodeHintType,Object> map = new Hashtable<EncodeHintType, Object>();//存放加密涉及的参数,密码,排错率
            map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);//容错率
            map.put(EncodeHintType.CHARACTER_SET,"utf-8");//编码格式
            map.put(EncodeHintType.MARGIN,1);

        //concent指所传内容加文字转换为字节数组,format指解密的码的形式
        BitMatrix bitMatrix = new MultiFormatWriter().encode(concent, BarcodeFormat.QR_CODE,width,heigth,map);
        //内存中的一张图片,利用二维数组的方式,产生点对,根据点对判断
        BufferedImage image =new BufferedImage(width,heigth,BufferedImage.TYPE_INT_RGB);//BufferedImage.TYPE_INT_RGB包含颜色
        for(int x=0;x<width;x++) {
            for(int y=0;y<heigth;y++) {

                image.setRGB(x,y,(bitMatrix.get(x,y)? BLACK:WHITE));
               // image.setRGB(x,y,(bitMatrix.get(x,y)? Color.BLACK:Color.WHEAT));
                //image.setRGB(x,y,(bitMatrix.get(x,y)?Color.BLACK: Color.white));
            }
        }
        //生成logo
        LogoUtil.logoMatrix(image,logo);
        //生成二维码图片
        File file = new File(imgPath);
        //生成二维码图片,format为图片格式
        ImageIO.write(image,format,file);
    }
}


发布了15 篇原创文章 · 获赞 3 · 访问量 790

猜你喜欢

转载自blog.csdn.net/qq_37158147/article/details/101384334
今日推荐