android最簡單的生成二維碼demo
package com.example.administrator.twocodedemo; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.PointF; import android.view.Gravity; import android.view.View.MeasureSpec; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.TextView; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import java.util.Hashtable; /** * * 生成條形碼和二維碼的工具 */ public class ZXingUtils { /** * 生成二維碼 要轉換的地址或字串,可以是中文 * * @param url * @param width * @param height * @return */ public static Bitmap createQRImage(String url, final int width, final int height) { try { // 判斷URL合法性 if (url == null || "".equals(url) || url.length() < 1) { return null; } Hashtable hints = new Hashtable(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 影象資料轉換,使用了矩陣轉換 BitMatrix bitMatrix = new QRCodeWriter().encode(url, BarcodeFormat.QR_CODE, width, height, hints); int[] pixels = new int[width * height]; // 下面這裡按照二維碼的演算法,逐個生成二維碼的圖片, // 兩個for迴圈是圖片橫列掃描的結果 for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { if (bitMatrix.get(x, y)) { pixels[y * width + x] = 0xff000000; } else { pixels[y * width + x] = 0xffffffff; } } } // 生成二維碼圖片的格式,使用ARGB_8888 Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, width, 0, 0, width, height); return bitmap; } catch (WriterException e) { e.printStackTrace(); } return null; } /** * 生成條形碼 * * @param context * @param contents * 需要生成的內容 * @param desiredWidth * 生成條形碼的寬頻 * @param desiredHeight * 生成條形碼的高度 * @param displayCode * 是否在條形碼下方顯示內容 * @return */ public static Bitmap creatBarcode(Context context, String contents, int desiredWidth, int desiredHeight, boolean displayCode) { Bitmap ruseltBitmap = null; /** * 圖片兩端所保留的空白的寬度 */ int marginW = 20; /** * 條形碼的編碼型別 */ BarcodeFormat barcodeFormat = BarcodeFormat.CODE_128; if (displayCode) { Bitmap barcodeBitmap = encodeAsBitmap(contents, barcodeFormat, desiredWidth, desiredHeight); Bitmap codeBitmap = creatCodeBitmap(contents, desiredWidth + 2 * marginW, desiredHeight, context); ruseltBitmap = mixtureBitmap(barcodeBitmap, codeBitmap, new PointF( 0, desiredHeight)); } else { ruseltBitmap = encodeAsBitmap(contents, barcodeFormat, desiredWidth, desiredHeight); } return ruseltBitmap; } /** * 生成條形碼的Bitmap * * @param contents * 需要生成的內容 * @param format * 編碼格式 * @param desiredWidth * @param desiredHeight * @return * @throws WriterException */ protected static Bitmap encodeAsBitmap(String contents, BarcodeFormat format, int desiredWidth, int desiredHeight) { final int WHITE = 0xFFFFFFFF; final int BLACK = 0xFF000000; MultiFormatWriter writer = new MultiFormatWriter(); BitMatrix result = null; try { result = writer.encode(contents, format, desiredWidth, desiredHeight, null); } catch (WriterException e) { // TODO Auto-generated catch block e.printStackTrace(); } int width = result.getWidth(); int height = result.getHeight(); int[] pixels = new int[width * height]; // All are 0, or black, by default for (int y = 0; y < height; y++) { int offset = y * width; for (int x = 0; x < width; x++) { pixels[offset + x] = result.get(x, y) ? BLACK : WHITE; } } Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, width, 0, 0, width, height); return bitmap; } /** * 生成顯示編碼的Bitmap * * @param contents * @param width * @param height * @param context * @return */ protected static Bitmap creatCodeBitmap(String contents, int width, int height, Context context) { TextView tv = new TextView(context); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); tv.setLayoutParams(layoutParams); tv.setText(contents); tv.setHeight(height); tv.setGravity(Gravity.CENTER_HORIZONTAL); tv.setWidth(width); tv.setDrawingCacheEnabled(true); tv.setTextColor(Color.BLACK); tv.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); tv.layout(0, 0, tv.getMeasuredWidth(), tv.getMeasuredHeight()); tv.buildDrawingCache(); Bitmap bitmapCode = tv.getDrawingCache(); return bitmapCode; } /** * 將兩個Bitmap合併成一個 * * @param first * @param second * @param fromPoint * 第二個Bitmap開始繪製的起始位置(相對於第一個Bitmap) * @return */ protected static Bitmap mixtureBitmap(Bitmap first, Bitmap second, PointF fromPoint) { if (first == null || second == null || fromPoint == null) { return null; } int marginW = 20; Bitmap newBitmap = Bitmap.createBitmap( first.getWidth() + second.getWidth() + marginW, first.getHeight() + second.getHeight(), Config.ARGB_4444); Canvas cv = new Canvas(newBitmap); cv.drawBitmap(first, marginW, 0, null); cv.drawBitmap(second, fromPoint.x, fromPoint.y, null); cv.save(Canvas.ALL_SAVE_FLAG); cv.restore(); return newBitmap; } }
相關推薦
android最簡單的生成二維碼demo
package com.example.administrator.twocodedemo; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; impo
Android 把url生成二維碼並貼到給定的底圖上
主要是用到了com.google.zxing jar包生成二維碼的功能,這個jar包需要自己接下載 直接上程式碼 public static Bitmap CreateBinaryCodeImageByUrl(String url,Bitmap bottomImg,int dra
Zxing簡單生成二維碼
1.匯入依賴 implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.2.5' 2.程式碼 //二維碼圖片控制元件 final ImageView imageView = view.findViewById(R
java支付寶掃碼支付,簡單生成二維碼方法
支付寶掃碼支付 首先申請 appid、app_private_key,publicKey, 直接上程式碼: 方式一:可以禁用支付通道(disable_pay_channels) public static void main(String[] args) thr
Zxing與 Zbar生成二維碼最簡單的實現方式
Zxing與 Zbar生成二維碼最簡單的實現方式 匯入依賴 implementation 'cn.bingoogolapple:bga-qrcode-zbar:1.2.1' 或者 implementation 'cn.bingoogolapple:bga-qrcode-zxing:1
Android:使用ZXing生成二維碼(支持加入Logo圖案)
over rmi api note sta size argb_8888 reat for循環 ZXing是谷歌的一個開源庫。能夠用來生成二維碼、掃描二維碼。本文所介紹的是第一部分。 首先上效果圖: ZXing相關各種文件官方下載地址:https://g
java學習-zxing生成二維碼矩陣的簡單例子
map obj 基於 The output 圖片 .get imageio sts 這個例子需要使用google的開源項目zxing的核心jar包 core-3.2.0.jar 可以百度搜索下載jar文件 也可使用maven添加依賴 <de
Android生成二維碼--儲存和分享二維碼圖片
之前寫過生成自定義二維碼的兩篇文章:《Android生成自定義二維碼》《Android生成二維碼–拍照或從相簿選取圖片》,下面就介紹一下Android應用內如何儲存以及分享二維碼圖片。 儲存圖片 Adnroid中儲存圖片可
Android 二維碼開發功能實現(四)------基於Zxing實現編碼功能(生成二維碼,一維碼等)
Android 二維碼開發功能實現(四)------基於Zxing實現編碼功能(生成二維碼,一維碼等) 前言 關於Google的開源庫Zxing,前面也寫了幾遍文章進行介紹.我們先簡單的回顧一下! Android 二維碼的掃碼功能實現(一) 這篇文章主要介紹了,Zxi
Android 生成二維碼
1.佈局 Xml <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientati
Android 實現生成二維碼
注入開源庫 implementation 'com.google.zxing:core:3.3.0' import android.graphics.Bitmap; import android.graphics.Canvas; import co
Android Studio生成二維碼
> 1:清單檔案 <uses-permission android:name="android.permission.CAMERA" /> > <uses-permission android:name="android.permission.VIBRA
簡單的掃描二維碼吐司+生成二維碼
1.匯入依賴(build.gradle) implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.3.4' 2.MainActivity頁面 public class MainActivity extends AppCompat
Android用Zxing掃二維碼/生成二維碼功能
新年已過,一切恢復真正常,新的一年給自己幾句指引: 光努力還不行,方向很重要。 總是想著最壞的結果,就會讓人失去改變的勇氣。 你當然有權利選擇自己的人生--但只有在你真正強大後,逆行的阻力才會降到最小。 never say never. 下面開始記錄二維碼使用過程
Android Zxing實現掃描二維碼條形碼功能仿微信整合閃光燈生成二維碼
最近在做android專案需要用到二維碼條形碼掃描功能,我用的是Eclipse網上原始碼大多是GitHup上的Android studio版本的所以我改了一版整合到專案中去。 效果圖: 左邊版本的掃碼框是自定義的。右邊版本的掃碼框和掃描線是圖片因為太醜所以最終換成左邊
Android生成二維碼--拍照或從相簿選取圖片
private void handleImageOnKitKat(Intent data) { String imagePath = null; Uri uri = data.getData(); if (DocumentsContract.isDocumentUri(this, ur
Android實現生成二維碼
public class EwmActivity extends AppCompatActivity { private EditText text; private Button button; private ImageView i
Android超方便 整合 Zxing實現掃一掃,閃光燈,生成二維碼圖片,解析二維碼(條碼)等功能
之前我寫過一篇部落格是關於如何將zxing整合到Android Studio中,以及簡單的實現掃一掃功能。 詳情請看:Android Studio整合Zxing掃一掃 但是,上面那篇部落格只有有一個掃一掃功能,而且在低解析度手機上會出現變形的問題。掃描速度也
Android平臺利用Zxing生成二維碼與解析圖片中的二維碼
轉載請註明http://blog.csdn.net/houkai6/article/details/47102733 1. 生成二維碼 public final class EncodingHandler { private static final int BLACK
Android平臺生成二維碼(by google.zxing)
查了大部分的資料,發現android平臺下生成二維碼的例子都是使用谷歌的zxing類,因此仿照某一個帖子編寫了一個demo進行測試,仿照的帖子: https://blog.csdn.net/myname_kk/article/details/77649477 例子中主要用到了BitMatri