這篇文章主要講解了Android中URL轉(zhuǎn)換成二維碼的實(shí)現(xiàn)方法,內(nèi)容清晰明了,對此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會有幫助。
創(chuàng)新互聯(lián)公司堅信:善待客戶,將會成為終身客戶。我們能堅持多年,是因?yàn)槲覀円恢笨芍档眯刨?。我們從不忽悠初訪客戶,我們用心做好本職工作,不忘初心,方得始終。10余年網(wǎng)站建設(shè)經(jīng)驗(yàn)創(chuàng)新互聯(lián)公司是成都老牌網(wǎng)站營銷服務(wù)商,為您提供成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、H5建站、網(wǎng)站制作、品牌網(wǎng)站建設(shè)、成都小程序開發(fā)服務(wù),給眾多知名企業(yè)提供過好品質(zhì)的建站服務(wù)。二維碼已經(jīng)成為我們?nèi)粘I钪械囊粋€不可獲取的產(chǎn)物,火車票上,景區(qū)門票,超市付款等等都會有二維碼的身影。
本文將實(shí)現(xiàn)由URL轉(zhuǎn)換成二維碼的過程。
先看一下示例圖
從示例圖中我們可以清晰地看到,URL被轉(zhuǎn)換成了二維碼。
下面跟隨我來一起實(shí)現(xiàn)這個功能。
導(dǎo)入Google提供的開源庫
compile 'com.google.zxing:core:3.3.0'
來講解一下核心的部分:二維碼轉(zhuǎn)換
①生成二維碼Bitmap
public static boolean createQRImage(String content, int widthPix, int heightPix, Bitmap logoBm, String filePath) { try { if (content == null || "".equals(content)) { return false; } //配置參數(shù) Maphints = new HashMap<>(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); //容錯級別 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); //設(shè)置空白邊距的寬度 hints.put(EncodeHintType.MARGIN, 2); //default is 4 // 圖像數(shù)據(jù)轉(zhuǎn)換,使用了矩陣轉(zhuǎn)換 BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, widthPix, heightPix, hints); int[] pixels = new int[widthPix * heightPix]; // 下面這里按照二維碼的算法,逐個生成二維碼的圖片, // 兩個for循環(huán)是圖片橫列掃描的結(jié)果 for (int y = 0; y < heightPix; y++) { for (int x = 0; x < widthPix; x++) { if (bitMatrix.get(x, y)) { pixels[y * widthPix + x] = 0xff000000; } else { pixels[y * widthPix + x] = 0xffffffff; } } } // 生成二維碼圖片的格式,使用ARGB_8888 Bitmap bitmap = Bitmap.createBitmap(widthPix, heightPix, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, widthPix, 0, 0, widthPix, heightPix); if (logoBm != null) { bitmap = addLogo(bitmap, logoBm); } //必須使用compress方法將bitmap保存到文件中再進(jìn)行讀取。直接返回的bitmap是沒有任何壓縮的,內(nèi)存消耗巨大! return bitmap != null && bitmap.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(filePath)); } catch (WriterException | IOException e) { e.printStackTrace(); } return false; }