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);
    }
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章