1. 程式人生 > >zxing生成二維碼圖片

zxing生成二維碼圖片

  • 在Module的build.gradle檔案中添加依賴和屬性配置(記得還有第三方共享的jar包要導):

    dependencies {
    • compile ‘com.google.zxing:core:3.3.0’
    }

 <ImageView
        android:id="@+id/img_ewm"
        android:layout_width="100dp"
        android:layout_height="100dp" />
  • 1
  • 2
  • 3
  • 4
  • 二維碼圖片工具類
public class QRCodeUtil {

    /**
     * 建立二維碼點陣圖
     *
     * @param
content 字串內容(支援中文) * @param width 點陣圖寬度(單位:px) * @param height 點陣圖高度(單位:px) * @return */
@Nullable public static Bitmap createQRCodeBitmap(String content, int width, int height){ return createQRCodeBitmap(content, width, height, "UTF-8", "H", "2", Color.BLACK, Color.WHITE); } /** * 建立二維碼點陣圖 (支援自定義配置和自定義樣式) * * @param
content 字串內容 * @param width 點陣圖寬度,要求>=0(單位:px) * @param height 點陣圖高度,要求>=0(單位:px) * @param character_set 字符集/字元轉碼格式 (支援格式:{//@link CharacterSetECI })。傳null時,zxing原始碼預設使用 "ISO-8859-1" * @param error_correction 容錯級別 (支援級別:{@link //ErrorCorrectionLevel })。傳null時,zxing原始碼預設使用 "L" * @param
margin 空白邊距 (可修改,要求:整型且>=0), 傳null時,zxing原始碼預設使用"4"。 * @param color_black 黑色色塊的自定義顏色值 * @param color_white 白色色塊的自定義顏色值 * @return */
@Nullable public static Bitmap createQRCodeBitmap(String content, int width, int height, @Nullable String character_set, @Nullable String error_correction, @Nullable String margin, @ColorInt int color_black, @ColorInt int color_white){ /** 1.引數合法性判斷 */ if(TextUtils.isEmpty(content)){ // 字串內容判空 return null; } if(width < 0 || height < 0){ // 寬和高都需要>=0 return null; } try { /** 2.設定二維碼相關配置,生成BitMatrix(位矩陣)物件 */ Hashtable<EncodeHintType, String> hints = new Hashtable<>(); if(!TextUtils.isEmpty(character_set)) { hints.put(EncodeHintType.CHARACTER_SET, character_set); // 字元轉碼格式設定 } if(!TextUtils.isEmpty(error_correction)){ hints.put(EncodeHintType.ERROR_CORRECTION, error_correction); // 容錯級別設定 } if(!TextUtils.isEmpty(margin)){ hints.put(EncodeHintType.MARGIN, margin); // 空白邊距設定 } BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); /** 3.建立畫素陣列,並根據BitMatrix(位矩陣)物件為陣列元素賦顏色值 */ int[] pixels = new int[width * height]; for(int y = 0; y < height; y++){ for(int x = 0; x < width; x++){ if(bitMatrix.get(x, y)){ pixels[y * width + x] = color_black; // 黑色色塊畫素設定 } else { pixels[y * width + x] = color_white; // 白色色塊畫素設定 } } } /** 4.建立Bitmap物件,根據畫素陣列設定Bitmap每個畫素點的顏色值,之後返回Bitmap物件 */ 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; } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 呼叫方法:
  ImageView mImageView = (ImageView) findViewById(R.id.img_ewm);
       Bitmap mBitmap = QRCodeUtil.createQRCodeBitmap("https://www.baidu.com", 480, 480);
       mImageView.setImageBitmap(mBitmap);
  • 1
  • 2
  • 3
  • 加入許可權
    <!-- 相機 -->
    <uses-permission android:name="android.permission.CAMERA" />
    <!-- 振動 -->
    <uses-permission android:name="android.permission.VIBRATE" />