java二維碼源碼
1. 求一個java寫的掃描二維碼的源代碼
請看圖片中介紹的
2. 怎麼使用java生成DataMatrix格式的二維碼
參考:
import com.spire.barcode.BarCodeGenerator;
import com.spire.barcode.BarCodeType;
import com.spire.barcode.BarcodeSettings;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
public class CreateDataMatrix {
public static void main(String[] args) throws Exception {
//生成BarcodeSettings實例
BarcodeSettings settings = new BarcodeSettings();
//設置條形碼類型為DataMatrix
settings.setType(BarCodeType.Data_Matrix);
//設置條形碼模型寬度
settings.setX(1.5f);
//設置數據和顯示文本
settings.setData("ABC 123456789ABC 123456789ABC 123456789");
settings.setData2D("ABC 123456789ABC 123456789ABC 123456789");
//創建BarCodeGenerator實例
BarCodeGenerator barCodeGenerator = new BarCodeGenerator(settings);
//根據settings生成圖像數據,保存至BufferedImage實例
BufferedImage bufferedImage = barCodeGenerator.generateImage();
//保存為PNG圖片
ImageIO.write(bufferedImage, "png", new File("DataMatrix.png"));
System.out.println("Complete!");
}
}
用到了spire.barcode for java庫
3. 如何用java生成二維碼
packagecommon;
importjava.awt.Color;
importjava.awt.Graphics2D;
importjava.awt.Image;
importjava.awt.image.BufferedImage;
importjava.io.File;
importjava.io.IOException;
importjava.util.HashMap;
importjava.util.Map;
importjavax.imageio.ImageIO;
importjp.sourceforge.qrcode.QRCodeDecoder;
importjp.sourceforge.qrcode.exception.DecodingFailedException;
importcom.google.zxing.BarcodeFormat;
importcom.google.zxing.Binarizer;
importcom.google.zxing.BinaryBitmap;
importcom.google.zxing.EncodeHintType;
importcom.google.zxing.LuminanceSource;
importcom.google.zxing.MultiFormatReader;
importcom.google.zxing.MultiFormatWriter;
importcom.google.zxing.NotFoundException;
importcom.google.zxing.WriterException;
importcom.google.zxing.common.BitMatrix;
importcom.google.zxing.common.HybridBinarizer;
importcom.swetake.util.Qrcode;
/**
*二維碼生成工具類
*@authorCloud
*@data2016-12-15
*QRCode
*/
publicclassQRCodeUtil{
//二維碼顏色
privatestaticfinalintBLACK=0xFF000000;
//二維碼顏色
privatestaticfinalintWHITE=0xFFFFFFFF;
/**
*<spanstyle="font-size:18px;font-weight:blod;">ZXing方式生成二維碼</span>
*@paramtext<ahref="javascript:void();">二維碼內容</a>
*@paramwidth二維碼寬
*@paramheight二維碼高
*@paramoutPutPath二維碼生成保存路徑
*@paramimageType二維碼生成格式
*/
(Stringtext,intwidth,intheight,StringoutPutPath,StringimageType){
Map<EncodeHintType,String>his=newHashMap<EncodeHintType,String>();
//設置編碼字元集
his.put(EncodeHintType.CHARACTER_SET,"utf-8");
try{
//1、生成二維碼
BitMatrixencode=newMultiFormatWriter().encode(text,BarcodeFormat.QR_CODE,width,height,his);
//2、獲取二維碼寬高
intcodeWidth=encode.getWidth();
intcodeHeight=encode.getHeight();
//3、將二維碼放入緩沖流
BufferedImageimage=newBufferedImage(codeWidth,codeHeight,BufferedImage.TYPE_INT_RGB);
for(inti=0;i<codeWidth;i++){
for(intj=0;j<codeHeight;j++){
//4、循環將二維碼內容定入圖片
image.setRGB(i,j,encode.get(i,j)?BLACK:WHITE);
}
}
FileoutPutImage=newFile(outPutPath);
//如果圖片不存在創建圖片
if(!outPutImage.exists())
outPutImage.createNewFile();
//5、將二維碼寫入圖片
ImageIO.write(image,imageType,outPutImage);
}catch(WriterExceptione){
e.printStackTrace();
System.out.println("二維碼生成失敗");
}catch(IOExceptione){
e.printStackTrace();
System.out.println("生成二維碼圖片失敗");
}
}
/**
*<spanstyle="font-size:18px;font-weight:blod;">二維碼解析</span>
*@paramanalyzePath二維碼路徑
*@return
*@throwsIOException
*/
@SuppressWarnings({"rawtypes","unchecked"})
(StringanalyzePath)throwsException{
MultiFormatReaderformatReader=newMultiFormatReader();
Objectresult=null;
try{
Filefile=newFile(analyzePath);
if(!file.exists())
{
return"二維碼不存在";
}
BufferedImageimage=ImageIO.read(file);
LuminanceSourcesource=newLuminanceSourceUtil(image);
Binarizerbinarizer=newHybridBinarizer(source);
BinaryBitmapbinaryBitmap=newBinaryBitmap(binarizer);
Maphints=newHashMap();
hints.put(EncodeHintType.CHARACTER_SET,"UTF-8");
result=formatReader.decode(binaryBitmap,hints);
}catch(NotFoundExceptione){
e.printStackTrace();
}
returnresult;
}
/**
*<spanstyle="font-size:18px;font-weight:blod;">QRCode方式生成二維碼</span>
*@paramcontent二維碼內容
*@paramimgPath二維碼生成路徑
*@paramversion二維碼版本
*@paramisFlag是否生成Logo圖片為NULL不生成
*/
publicstaticvoidQRCodeCreate(Stringcontent,StringimgPath,intversion,StringlogoPath){
try{
QrcodeqrcodeHandler=newQrcode();
//設置二維碼排錯率,可選L(7%)M(15%)Q(25%)H(30%),排錯率越高可存儲的信息越少,但對二維碼清晰度的要求越小
qrcodeHandler.setQrcodeErrorCorrect('M');
//N代表數字,A代表字元a-Z,B代表其他字元
qrcodeHandler.setQrcodeEncodeMode('B');
//版本1為21*21矩陣,版本每增1,二維碼的兩個邊長都增4;所以版本7為45*45的矩陣;最高版本為是40,是177*177的矩陣
qrcodeHandler.setQrcodeVersion(version);
//根據版本計算尺寸
intimgSize=67+12*(version-1);
byte[]contentBytes=content.getBytes("gb2312");
BufferedImagebufImg=newBufferedImage(imgSize,imgSize,BufferedImage.TYPE_INT_RGB);
Graphics2Dgs=bufImg.createGraphics();
gs.setBackground(Color.WHITE);
gs.clearRect(0,0,imgSize,imgSize);
//設定圖像顏色>BLACK
gs.setColor(Color.BLACK);
//設置偏移量不設置可能導致解析出錯
intpixoff=2;
//輸出內容>二維碼
if(contentBytes.length>0&&contentBytes.length<130){
boolean[][]codeOut=qrcodeHandler.calQrcode(contentBytes);
for(inti=0;i<codeOut.length;i++){
for(intj=0;j<codeOut.length;j++){
if(codeOut[j][i]){
gs.fillRect(j*3+pixoff,i*3+pixoff,3,3);
}
}
}
}else{
System.err.println("QRCodecontentbyteslength="+contentBytes.length+"notin[0,130].");
}
/*判斷是否需要添加logo圖片*/
if(logoPath!=null){
Fileicon=newFile(logoPath);
if(icon.exists()){
intwidth_4=imgSize/4;
intwidth_8=width_4/2;
intheight_4=imgSize/4;
intheight_8=height_4/2;
Imageimg=ImageIO.read(icon);
gs.drawImage(img,width_4+width_8,height_4+height_8,width_4,height_4,null);
gs.dispose();
bufImg.flush();
}else{
System.out.println("Error:login圖片還在在!");
}
}
gs.dispose();
bufImg.flush();
//創建二維碼文件
FileimgFile=newFile(imgPath);
if(!imgFile.exists())
imgFile.createNewFile();
//根據生成圖片獲取圖片
StringimgType=imgPath.substring(imgPath.lastIndexOf(".")+1,imgPath.length());
//生成二維碼QRCode圖片
ImageIO.write(bufImg,imgType,imgFile);
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*<spanstyle="font-size:18px;font-weight:blod;">QRCode二維碼解析</span>
*@paramcodePath二維碼路徑
*@return解析結果
*/
(StringcodePath){
FileimageFile=newFile(codePath);
BufferedImagebufImg=null;
StringdecodedData=null;
try{
if(!imageFile.exists())
return"二維碼不存在";
bufImg=ImageIO.read(imageFile);
QRCodeDecoderdecoder=newQRCodeDecoder();
decodedData=newString(decoder.decode(newImageUtil(bufImg)),"gb2312");
}catch(IOExceptione){
System.out.println("Error:"+e.getMessage());
e.printStackTrace();
}catch(DecodingFailedExceptiondfe){
System.out.println("Error:"+dfe.getMessage());
dfe.printStackTrace();
}
returndecodedData;
}
}
3、最後貼測試代碼:
packagetest;
importjava.awt.image.BufferedImage;
importjava.io.InputStream;
importjava.net.URL;
importjavax.imageio.ImageIO;
importcommon.ImageUtil;
importcommon.QRCodeUtil;
importjp.sourceforge.qrcode.QRCodeDecoder;
/**
*二維碼生成測試類
*@authorCloud
*@data2016-11-21
*QRCodeTest
*/
publicclassQRCodeTest{
publicstaticvoidmain(String[]args)throwsException{
/**
*QRcode二維碼生成測試
*QRCodeUtil.QRCodeCreate("http://blog.csdn.net/u014266877","E://qrcode.jpg",15,"E://icon.png");
*/
/**
*QRcode二維碼解析測試
*StringqrcodeAnalyze=QRCodeUtil.QRCodeAnalyze("E://qrcode.jpg");
*/
/**
*ZXingCode二維碼生成測試
*QRCodeUtil.zxingCodeCreate("http://blog.csdn.net/u014266877",300,300,"E://zxingcode.jpg","jpg");
*/
/**
*ZxingCode二維碼解析
*StringzxingAnalyze=QRCodeUtil.zxingCodeAnalyze("E://zxingcode.jpg").toString();
*/
System.out.println("success");
}
}
4. 求一份java調用微信掃一掃的源碼
😯
5. 誰有java二維碼掃描軟體
我沒太懂你的意思,你是要java寫的掃描軟體的話,網上有很多啊,微信也可以掃描啊,我這里有一個用java寫的生成二維碼和解析二維碼的工程,研究二維碼代碼的話可以去google的開源項目zxing看一下,希望對你有幫助。
6. 誰有二維碼生成的源代碼(java版本)的,能提供些嗎
可以考慮使用圖形繪制來解決二維碼的生成問題,使用實例如下:
生成二維碼
packagenet.qrcode;
importjava.awt.image.BufferedImage;
importjava.io.File;
importjava.io.IOException;
importjava.io.OutputStream;
importjavax.imageio.ImageIO;
importcom.google.zxing.common.BitMatrix;
{
//私有不可更改的變數:生成二維碼圖片的顏色
privatestaticfinalintBLACK=0xFF000000;
privatestaticfinalintWHITE=0xFFFFFFFF;
//空的構造方法
publicMartixToImageWriter(){
//TODOAuto-generatedconstructorstub
}
/**
*靜態方法
*BufferedImage是Image的一個子類,BufferedImage生成的圖片在內存里有一個圖像緩沖區,利用這個緩沖區我們可以很方便的操作這個圖片,
*通常用來做圖片修改操作如大小變換、圖片變灰、設置圖片透明或不透明等。
*@parammatrix編碼形式
*@return
*/
(BitMatrixmatrix)
{
//圖片的寬度和高度
intwidth=matrix.getWidth();
intheight=matrix.getHeight();
//BufferedImage.TYPE_INT_RGB將圖片變為什麼顏色
BufferedImageimage=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
for(intx=0;x<width;x++)
{
for(inty=0;y<height;y++)
{
image.setRGB(x,y,matrix.get(x,y)?BLACK:WHITE);
}
}
returnimage;
}
/**
*靜態方法用於生成圖片
*@parammatrix編碼形式
*@paramformat圖片類型
*@paramfile文件(圖片路徑,圖片名稱)
*@throwsIOException
*/
publicstaticvoidwriteToFile(BitMatrixmatrix,Stringformat,Filefile)throwsIOException
{
BufferedImageimage=toBufferedImage(matrix);
if(!ImageIO.write(image,format,file))
{
thrownewIOException("Couldnotwriteanimageofformat"+format+"to"+file);
}
}
/**
*輸出
*@parammatrix
*@paramformat
*@paramstream
*@throwsIOException
*/
publicstaticvoidwriteToStream(BitMatrixmatrix,Stringformat,OutputStreamstream)throwsIOException
{
BufferedImageimage=toBufferedImage(matrix);
if(!ImageIO.write(image,format,stream))
{
thrownewIOException("Couldnotwriteanimageofformat"+format);
}
}
}
測試二維碼是否生成成功
packagenet.qrcode;
importjava.io.File;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
importcom.google.zxing.BarcodeFormat;
importcom.google.zxing.EncodeHintType;
importcom.google.zxing.MultiFormatWriter;
importcom.google.zxing.common.BitMatrix;
publicclassTwoDimensionCode{
publicstaticvoidmain(String[]args){
try
{
System.out.println("請輸入您要生成二維碼的信息");
Scannerinput=newScanner(System.in);
Stringcontent=input.next();
Stringpath="C:\Users\Administrator\Desktop\二維碼圖片庫";
=newMultiFormatWriter();
Maphints=newHashMap();
hints.put(EncodeHintType.CHARACTER_SET,"UTF-8");
//按照指定的寬度,高度和附加參數對字元串進行編碼
//生成二維碼
BitMatrixbitMatrix=multiFormatWrite.encode(content,BarcodeFormat.QR_CODE,400,400,hints);
Filefile1=newFile(path,userId+".jpg");
//寫入文件
MartixToImageWriter.writeToFile(bitMatrix,"jpg",file1);
System.out.println("二維碼圖片生成成功!");
}
catch(Exceptione)
{
e.printStackTrace();
}
}
}
7. Android二維碼識別源碼,可有多種實現方式
這里簡單介紹一下ZXing庫。ZXing是一個開放源碼的,用Java實現的多種格式的1D/2D條碼圖像處理庫,它包含了聯繫到其他語言的埠。Zxing可以實現使用手機的內置的攝像頭完成條形碼的掃描及解碼。該項目可實現的條形碼編碼和解碼。目前支持以下格式:UPC-A,UPC-E、EAN-8,EAN-13、39碼、93碼。ZXing是個很經典的條碼/二維碼識別的開源類庫,以前在功能機上,就有開發者使用J2ME運用ZXing了,不過要支持JSR-234規范(自動對焦)的手機才能發揮其威力。
下面是ZXing的demo運行,我這里創建了一個二維碼,內容是我博客的網址,大夥可以用微信的掃一掃功能,試一下。就可以直接打開我博客。
2、ZXing庫主要類
下面給大家介紹一下,ZXing庫裡面主要的類以及這些類的作用:
CaptureActivity。這個是啟動Activity 也就是掃描器。
CaptureActivityHandler 解碼處理類,負責調用另外的線程進行解碼。
DecodeThread 解碼的線程。
com.google.zxing.client.android.camera 包,攝像頭控制包。
ViewfinderView 自定義的View,就是我們看見的拍攝時中間的框框了。
3、使用ZXing生成二維碼
下面針對二維碼生成和解析做個簡單介紹,至於詳細的使用方法,建議大家還是自己看看源碼,使用起來很簡單,不過這個開源項目的代碼,值得好好看看。首先給出二維碼生成的方法:
View Code
上面就是二維碼生成的方法介面,如果你只是使用者方法,很簡單,只要傳入一個URL即可,就像我截圖裡面一樣,傳入一個合法的網址即可。或者像現在一些移動APP的推廣,把APP下載地址轉為二維碼,只要掃一下就可以下載相應的APP。這個也是目前比較流行的APP的推廣方式。
上面代碼做的事情不多,主要是調用ZXing庫裡面QRCodeWriter().encode的方法對我們傳進去的URL進行編碼,具體如何編碼,這個我這里就不詳細說,有興趣可以看ZXing的源碼。文章最後會給出ZXing的源碼和例子代碼。
4、掃描二維碼獲取信息
掃描獲取二維碼信息的工作稍微復雜一些,主要是需要編寫Camera的使用,這個跟我們一般使用Camera一樣,需要使用Surfaceview作為預覽,這一部我這里就不說了,這個應該不是太復雜。對於使用過Camera做預覽的朋友,應該是挺簡單的事情。獲取二維碼數據的關鍵處理是在Camera的自動對焦回調函數哪裡,調用ZXing的解碼介面。
View Code
這里稍微多說一句,由於解碼需要一定時間,所以ZXing的解碼調用,都是使用了Handler作為線程通信機制,解碼的工作都是放在獨立線程裡面使用的,如果你直接在主線程解碼,恐怕ANR問題是避免不了。
View Code
上面是解碼的線程處理不同狀態的時候需要注意的地方,我們這里只看獲取圖像成功的地方,成功獲取圖片解碼的實在DecodeThread裡面實現,DecodeThread裡面解碼成功後,會把數據序列化,然後保存到Bundle裡面,我們可以直接通過Bundle的序列化,獲取到圖片數據。同時會把解碼後的結果保存到MSG裡面,然後就可以根據實際情況進行處理,例如上面代碼,解碼成功後,會調用一個處理函數:
View Code
上面就是整個二維碼的解碼流程,裡面因為涉及很多Camera的使用,所以你如果需要使用二維碼識別,需要注意一下你的程序需要申請下面的許可權,一般的Camera使用以及Camera的自動對焦等。
View Code
5、結語
上面就是生成和識別二維碼的關鍵流程和代碼,有興趣的朋友可以自己查看ZXing的源碼,裡面有很多圖像分析的知識可以學習。具體使用也可以參考我下面給出的Demo。二維碼對於現在移動開發來說很是很常用的技術,所以有空可以了解一下,說不定什麼時候就用上了。另外,ZXing庫除了二維碼外,其實對於條形碼也是支持的,只是我這里沒有介紹。有需要的自己去看看源碼即可。
轉載
8. 如何使用java開發二維碼代碼
1: 使用SwetakeQRCode在Java項目中生成二維碼
http://swetake.com/qr/ 下載地址
或著http://sourceforge.jp/projects/qrcode/downloads/28391/qrcode.zip
這個是日本人寫的,生成的是我們常見的方形的二維碼
可以用中文
如:5677777ghjjjjj
2: 使用BarCode4j生成條形碼和二維碼
BarCode4j網址:http://sourceforge.NET/projects/barcode4j/
barcode4j是使用datamatrix的二維碼生成演算法,為支持qr的演算法
datamatrix是歐美的標准,qr為日本的標准,
barcode4j一般生成出來是長方形的
如:88777alec000yan
這個博客這方面說的挺清楚的:
http://jinshan.iteye.com/blog/1004554
3:zxing
zxing 這個是google的
下載地址
http://code.google.com/p/zxing/downloads/list
Java代碼:
import java.io.File;
import java.util.Hashtable;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.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就有實現二維碼的方法
利用這個api,使用google appengine進行實現。
5:JS生成二維碼
使用jQuery-qrcode生成二維碼
先簡單說一下jquery-qrcode,這個開源的三方庫(可以從https://github.com/jeromeetienne/jquery-qrcode 獲取),
qrcode.js 是實現二維碼數據計算的核心類,
jquery.qrcode.js 是把它用jquery方式封裝起來的,用它來實現圖形渲染,其實就是畫圖(支持canvas和table兩種方式)
支持的功能主要有:
Js代碼:
text : "https://github.com/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;
}
9. java怎麼生成二維碼
1: 使用SwetakeQRCode在Java項目中生成二維碼
這個是日本人寫的,生成的是我們常見的方形的二維碼
可以用中文
2: 使用BarCode4j生成條形碼和二維碼
barcode4j是使用datamatrix的二維碼生成演算法,為支持qr的演算法
datamatrix是歐美的標准,qr為日本的標准,
barcode4j一般生成出來是長方形的
3:zxing
zxing 這個是google的
10. 誰能發一份用java實現手機掃描二維碼實現登陸網頁登陸的代碼給我 或者介紹一些關於這方面原理的視頻 謝謝
原理可以有,源碼就罷了
~
WEB生成二維碼圖片、並監聽(WEBSOCKET或 AJAX)
手機中相應的APP,根據掃描的二維碼,去訪問WEB。。。。
WEB監聽到、收到手機的正確傳遞,就通過登錄