java实现⼆维码⽣成的⼏个⽅法(推荐)
java实现⼆维码⽣成的⼏个⽅法,具体如下:
1:使⽤SwetakeQRCode在Java项⽬中⽣成⼆维码
这个是⽇本⼈写的,⽣成的是我们常见的⽅形的⼆维码
可以⽤中⽂
如:5677777ghjjjjj
2:使⽤BarCode4j⽣成条形码和⼆维码
barcode4j是使⽤datamatrix的⼆维码⽣成算法,为⽀持qr的算法
datamatrix是欧美的标准,qr为⽇本的标准,
barcode4j⼀般⽣成出来是长⽅形的
如:88777alec000yan
3:zxing
zxing 这个是google的
Java代码:
import java.io.File;
import java.util.Hashtable;
le.zxing.BarcodeFormat;
le.zxing.EncodeHintType;
le.zxing.MultiFormatWriter;
le.zxing.client.j2se.MatrixToImageWriter;
le.zxingmon.BitMatrix;
le.zxing.qrcode.QRCodeWriter;
public class QRCodeEvents {
public static void main(String []args)throws Exception{
String text = "你好";
int width = 100;
int height = 100;
String format = "png";
Hashtable hints= new Hashtable();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height,hints);
File outputFile = new File("new.png");
MatrixToImageWriter.writeToFile(bitMatrix, format, outputFile);
}
}
4:google chart api就有实现⼆维码的⽅法
springboot其实就是spring利⽤这个api,使⽤google appengine进⾏实现。
5:JS⽣成⼆维码
使⽤jQuery-qrcode⽣成⼆维码
qrcode.js 是实现⼆维码数据计算的核⼼类,
jquery.qrcode.js 是把它⽤jquery⽅式封装起来的,⽤它来实现图形渲染,其实就是画图(⽀持canvas和table两种⽅式)⽀持的功能主要有:
Js代码:
text : "github/jeromeetienne/jquery-qrcode" //设置⼆维码内容
Js代码:
render : "canvas",//设置渲染⽅式
width : 256, //设置宽度
height : 256, //设置⾼度
typeNumber : -1, //计算模式
correctLevel : QRErrorCorrectLevel.H,//纠错等级
background : "#ffffff",//背景颜⾊
foreground : "#000000" //前景颜⾊
使⽤⽅式⾮常简单
Js代码:
jQuery('#output').qrcode({width:200,height:200,correctLevel:0,text:content});
经过简单实践,
使⽤canvas⽅式渲染性能还是⾮常不错的,但是如果⽤table⽅式,性能不太理想,特别是IE9以下的浏览器,所以需要⾃⾏优化⼀下渲染table的⽅式,这⾥就不细述了。
其实上⾯的js有⼀个⼩⼩的缺点,就是默认不⽀持中⽂。
这跟js的机制有关系,jquery-qrcode这个库是采⽤ charCodeAt() 这个⽅式进⾏编码转换的,
⽽这个⽅法默认会获取它的 Unicode 编码,⼀般的解码器都是采⽤UTF-8, ISO-8859-1等⽅式,
英⽂是没有问题,如果是中⽂,⼀般情况下Unicode是UTF-16实现,长度2位,⽽UTF-8编码是3位,这样⼆维码的编解码就不匹配了。
解决⽅式当然是,在⼆维码编码前把字符串转换成UTF-8,具体代码如下:
function utf16to8(str) {
var out, i, len, c;
out = "";
len = str.length;
for(i = 0; i < len; i++) {
c = str.charCodeAt(i);
if ((c >= 0x0001) && (c <= 0x007F)) {
out += str.charAt(i);
} else if (c > 0x07FF) {
out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
} else {
out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
}
}
return out;
}
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论