zxing生成二維碼圖片
阿新 • • 發佈:2019-02-02
在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" />