Java⽣成⼆维码及logo⼆维码依赖jar包
⼆维码的实现有多种⽅法,⽐如 Google 的 zxing 和⽇本公司的 QrCode,本⽂以 QrCode 为例。
QrCode.jar:
加⼊本地 maven:
mvn install:install-file -Dfile=QRCode.jar -DgroupId=QRCode -DartifactId=QRCode -Dversion=3.0 -Dpackaging=jar 注意,QrCode 实现的⼆维码不能很好的⽀持中⽂。
实例源码
import com.swetake.util.Qrcode;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
/**
* 1、QrCode ⽣成⼆维码图⽚
* 2、⽣成带有 logo 的⼆维码图⽚
* Created by zhengbinMac on 2017/4/27.
*/
public class QrCodeTest {
/**
中国人民解放军军事学院* ⽣成⼆维码 Buffered
* @param content ⼆维码内容
* @return
*/
public static BufferedImage QrcodeImage(String content) {
// ⼆维码宽度
int width = 140;
// ⼆维码⾼度
int height = 140;
try {
Qrcode qrcode = new Qrcode();
// 设置⼆维码的排错率 'L':7%,'M':15%,'Q':25%,'H':30%
体育教师工作总结qrcode.setQrcodeErrorCorrect('M');
qrcode.setQrcodeEncodeMode('B');
/
/ 设置⼆维码的尺⼨,尺⼨越⼤,可存储的信息量越⼤
qrcode.setQrcodeVersion(7);
// 设置图⽚的尺⼨、格式
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 绘制⼆维码的图⽚
Graphics2D graphics2D = ateGraphics();
// 设置背景颜⾊
graphics2D.setBackground(Color.WHITE);
// 创建⼆维码的矩形区域
graphics2D.clearRect(0, 0, width, height);
// 设置⼆维码图⽚的颜⾊值
graphics2D.setColor(Color.BLACK);
// ⼆维码⽣成点阵的偏移量
int pixoff = 2;
// 获取⼆维码内容的字节数组,并设置编码
byte[] contentBytes = Bytes("UTF-8");
// 输出⼆维码
if (contentBytes.length > 0 && contentBytes.length < 200) { // 如果⼆维码内容在规定长度内
boolean[][] codeOut = qrcode.calQrcode(contentBytes);
for (int i = 0;i < codeOut.length;i++) {
for (int j = 0;j < codeOut.length;j++) {
if (codeOut[j][i]) {
graphics2D.fillRect(j*3+pixoff, i*3+pixoff, 3, 3);
}
}
}
}
graphics2D.dispose();
bufferedImage.flush();
return bufferedImage;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 在已有的⼆维码图⽚加上logo图⽚
* @param twodimensioncodeImg ⼆维码图⽚⽂件
* @param logoImg logo图⽚⽂件
* @return
*/
public static BufferedImage encodeImgLogo(File twodimensioncodeImg,File logoImg){
BufferedImage twodimensioncode = null;
try{
if(!twodimensioncodeImg.isFile() || !logoImg.isFile()){
System.out.println("输⼊⾮图⽚");
return null;
}
//读取⼆维码图⽚
twodimensioncode = ad(twodimensioncodeImg);
//获取画笔
Graphics2D g = ateGraphics();
//读取logo图⽚
BufferedImage logo = ad(logoImg);
//设置⼆维码⼤⼩,太⼤,会覆盖⼆维码,此处20%
int logoWidth = Width(null) > Width()*3 /10 ? (Width()*3 /10) : Width(null);
int logoHeight = Height(null) > Height()*3 /10 ? (Height()*3 /10) : Height(null);
// 确定⼆维码的中⼼位置坐标,设置logo图⽚放置的位置
int x = (Width() - logoWidth) / 2;
int y = (Height() - logoHeight) / 2;
//开始合并绘制图⽚
g.drawImage(logo, x, y, logoWidth, logoHeight, null);
g.drawRoundRect(x, y, logoWidth, logoHeight, 15 ,15);
//logo边框⼤⼩
g.setStroke(new BasicStroke(2));
//logo边框颜⾊
g.setColor(Color.WHITE);
g.drawRect(x, y, logoWidth, logoHeight);
g.dispose();
logo.flush();
twodimensioncode.flush();
阀门型号}catch(Exception e){
System.out.println("⼆维码绘制logo失败");
}
return twodimensioncode;
}
/
**
* ⽣成图⽚⽂件
* @param bufferedImage 图⽚ buffered
* @param imgPath 图⽚路径
*/
public static void writeImage(BufferedImage bufferedImage, String imgPath) {
// ⽣成⼆维码的图⽚
File file = new File(imgPath);
try {
ImageIO.write(bufferedImage, "png", file);
自制葡萄酒保质期} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// ⽣成⼆维码
BufferedImage qrCode = QrcodeImage("zhengbinblogs");
writeImage(qrCode, "/Users/zhengbinMac/Documents/qrcode/qecode2.png");
// ⽣成带有图⽚logo的⼆维码
2022跨年文案短句File qrcode = new File("/Users/zhengbinMac/Documents/qrcode/qecode2.png");
File logo = new File("/Users/zhengbinMac/Documents/qrcode/logo.png");
BufferedImage logoQrcode = encodeImgLogo(qrcode, logo);白菜饺子馅的做法
writeImage(logoQrcode, "/Users/zhengbinMac/Documents/qrcode/logQrcode.png"); }
}
⼆维码效果
下⾯打开扫⼀下吧
超链接⼆维码:普通⽂本内容⼆维码:
注意,超链接前需要加 ' ',否则显⽰普通⽂本内容
⼆维码的解析
/**
* 解析⼆维码
*/
public static String decodeImg(String imgPath) {
File imgFile = new File(imgPath);
if (imgFile == null) {
return null;
}
BufferedImage bufferedImage;
String content = null;
try {
bufferedImage = ad(imgFile);
QRCodeDecoder decoder = new QRCodeDecoder();
// decode ⽅法⼊参为 QRCodeImage,其是接⼝声明,需要实现该接⼝
content = new String(decoder.decode(new CodeImg(bufferedImage)), "UTF-8");
} catch (IOException e) {
e.printStackTrace();
}
return content;
}
/
**
* 实现 QRCodeImage 接⼝
*/
static class CodeImg implements QRCodeImage{
private BufferedImage image;
public CodeImg(BufferedImage image) {
super();
this.image = image;
}
@Override
public int getWidth() { Width(); }
@Override
public int getHeight() { Height(); }
@Override
public int getPixel(int x, int y) { RGB(x, y); }
public BufferedImage getImage() { return image; }
public void setImage(BufferedImage image) { this.image = image; }
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论