⼆维码⽣成与解析代码实现
⼆维码,是⼀种采⽤⿊⽩相间的平⾯⼏何图形通过相应的编码算法来记录⽂字、图⽚、⽹址等信息的条码图⽚。如下图
⼆维码的特点:
1.⾼密度编码,信息容量⼤
可容纳多达1850个⼤写字母或2710个数字或1108个字节,或500多个汉字,⽐普通条码信息容量约⾼⼏⼗倍。
2.编码范围⼴
该条码可以把图⽚、声⾳、⽂字、签字、指纹等可以数字化的信息进⾏编码,⽤条码表⽰出来;可以表⽰多种语⾔⽂字;可表⽰图像数
据。
3.容错能⼒强,具有纠错功能
这使得⼆维条码因穿孔、污损等引起局部损坏时,照样可以正确得到识读,损毁⾯积达50%仍可恢复信息。
4.译码可靠性⾼
它⽐普通条码译码错误率百万分之⼆要低得多,误码率不超过千万分之⼀。
5.可引⼊加密措施
保密性、防伪性好。
6.成本低,易制作,持久耐⽤
正因为以上这些特点,⼆维码现在越来越流⾏,应⽤也是越来越⼴(详细了解请见百度百科,介绍不是本篇重点),所以掌握如何开发
⼆维码是⾮常不错的知识储备,因此本篇博⽂将为⼤家讲解如何⽣成、解析⼆维码。
⼀、Java
所需jar包:
TwoDimensionCode类:⼆维码操作核⼼类
packageqrcode;
;
cs2D;
edImage;
;
ption;
tream;
Stream;
O;
Decoder;
ngFailedException;
;
publicclassTwoDimensionCode{
/**
*⽣成⼆维码(QRCode)图⽚
*@paramcontent存储内容
*@paramimgPath图⽚路径
*/
publicvoidencoderQRCode(Stringcontent,StringimgPath){
rQRCode(content,imgPath,"png",7);
}
/**
*⽣成⼆维码(QRCode)图⽚
*@paramcontent存储内容
*@paramoutput输出流
*/
publicvoidencoderQRCode(Stringcontent,OutputStreamoutput){
rQRCode(content,output,"png",7);
}
/**
*⽣成⼆维码(QRCode)图⽚
*@paramcontent存储内容
*@paramimgPath图⽚路径
*@paramimgType图⽚类型
*/
publicvoidencoderQRCode(Stringcontent,StringimgPath,StringimgType){
rQRCode(content,imgPath,imgType,7);
}
/**
*⽣成⼆维码(QRCode)图⽚
*@paramcontent存储内容
*@paramoutput输出流
*@paramimgType图⽚类型
*/
publicvoidencoderQRCode(Stringcontent,OutputStreamoutput,StringimgType){
rQRCode(content,output,imgType,7);
}
/**
*⽣成⼆维码(QRCode)图⽚
*@paramcontent存储内容
*@paramimgPath图⽚路径
*@paramimgType图⽚类型
*@paramsize⼆维码尺⼨
*/
publicvoidencoderQRCode(Stringcontent,StringimgPath,StringimgType,intsize){
try{
BufferedImagebufImg=Common(content,imgType,size);
FileimgFile=newFile(imgPath);
//⽣成⼆维码QRCode图⽚
(bufImg,imgType,imgFile);
}catch(Exceptione){
tackTrace();
}
}
/**
*⽣成⼆维码(QRCode)图⽚
*@paramcontent存储内容
*@paramoutput输出流
*@paramimgType图⽚类型
*@paramsize⼆维码尺⼨
*/
publicvoidencoderQRCode(Stringcontent,OutputStreamoutput,StringimgType,intsize){
try{
BufferedImagebufImg=Common(content,imgType,size);
//⽣成⼆维码QRCode图⽚
(bufImg,imgType,output);
}catch(Exceptione){
tackTrace();
}
}
/**
*⽣成⼆维码(QRCode)图⽚的公共⽅法
*@paramcontent存储内容
*@paramimgType图⽚类型
*@paramsize⼆维码尺⼨
*@return
*/
privateBufferedImageqRCodeCommon(Stringcontent,StringimgType,intsize){
BufferedImagebufImg=null;
try{
QrcodeqrcodeHandler=newQrcode();
//设置⼆维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越⾼可存储的信息越少,但对⼆维码清晰度的要求越⼩
odeErrorCorrect('M');
odeEncodeMode('B');
//设置设置⼆维码尺⼨,取值范围1-40,值越⼤尺⼨越⼤,可存储的信息越⼤
odeVersion(size);
//获得内容的字节数组,设置编码格式
byte[]contentBytes=es("utf-8");
//图⽚尺⼨
intimgSize=67+12*(size-1);
bufImg=newBufferedImage(imgSize,imgSize,_INT_RGB);
Graphics2Dgs=Graphics();
//设置背景颜⾊
kground();
ect(0,0,imgSize,imgSize);
//设定图像颜⾊>BLACK
or();
//设置偏移量,不设置可能导致解析出错
intpixoff=2;
//输出内容>⼆维码
if(>0&&<800){
boolean[][]codeOut=ode(contentBytes);
for(inti=0;i<;i++){
for(intj=0;j<;j++){
if(codeOut[j][i]){
ct(j*3+pixoff,i*3+pixoff,3,3);
}
}
}
}el{
thrownewException("QRCodecontentbyteslength="++"notin[0,800].");
}
e();
();
}catch(Exceptione){
tackTrace();
}
returnbufImg;
}
/**
*解析⼆维码(QRCode)
*@paramimgPath图⽚路径
*@return
*/
publicStringdecoderQRCode(StringimgPath){
//QRCode⼆维码图⽚的⽂件
FileimageFile=newFile(imgPath);
BufferedImagebufImg=null;
Stringcontent=null;
try{
bufImg=(imageFile);
QRCodeDecoderdecoder=newQRCodeDecoder();
QRCodeDecoderdecoder=newQRCodeDecoder();
content=newString((newTwoDimensionCodeImage(bufImg)),"utf-8");
}catch(IOExceptione){
n("Error:"+sage());
tackTrace();
}catch(DecodingFailedExceptiondfe){
n("Error:"+sage());
tackTrace();
}
returncontent;
}
/**
*解析⼆维码(QRCode)
*@paraminput输⼊流
*@return
*/
publicStringdecoderQRCode(InputStreaminput){
BufferedImagebufImg=null;
Stringcontent=null;
try{
bufImg=(input);
QRCodeDecoderdecoder=newQRCodeDecoder();
content=newString((newTwoDimensionCodeImage(bufImg)),"utf-8");
}catch(IOExceptione){
n("Error:"+sage());
tackTrace();
}catch(DecodingFailedExceptiondfe){
n("Error:"+sage());
tackTrace();
}
returncontent;
}
publicstaticvoidmain(String[]args){
StringimgPath="G:/TDDOWNLOAD/Michael_";
StringencoderContent="Hello⼤⼤、⼩⼩,welcometoQRCode!"+"nMyblog[]"+"nEMail[sjsky007@]";
TwoDimensionCodehandler=newTwoDimensionCode();
rQRCode(encoderContent,imgPath,"png");
//try{
//OutputStreamoutput=newFileOutputStream(imgPath);
//rQRCode(content,output);
//}catch(Exceptione){
//tackTrace();
//}
n("========encodersuccess");
StringdecoderContent=rQRCode(imgPath);
n("解析结果如下:");
n(decoderContent);
n("========decodersuccess");
}
}
TwoDimensionCodeImage类:⼆维码图⽚对象
packageqrcode;
edImage;
Image;
publicclassTwoDimensionCodeImageimplementsQRCodeImage{
BufferedImagebufImg;
publicTwoDimensionCodeImage(BufferedImagebufImg){
=bufImg;
}
@Override
publicintgetHeight(){
ght();
}
@Override
publicintgetPixel(intx,inty){
(x,y);
}
@Override
publicintgetWidth(){
th();
}
}
⼆、.NET
所需dll:
上⾯的java代码,笔者已经进⾏了简单的封装,⽅便⼤家适⽤不同场合,希望对⼤家能有所帮助。
本文发布于:2023-03-11 16:52:21,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1678524742216866.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:网址生成二维码.doc
本文 PDF 下载地址:网址生成二维码.pdf
留言与评论(共有 0 条评论) |