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