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