日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android:使用ZXing生成二维码(支持添加Logo图案)

發布時間:2024/1/18 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android:使用ZXing生成二维码(支持添加Logo图案) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ZXing是谷歌的一個開源庫,可以用來生成二維碼、掃描二維碼。本文所介紹的是第一部分。

首先上效果圖:


ZXing相關各種文件官方下載地址:https://github.com/zxing/zxing/releases?

或者在這里下載(只有本項目所用的jar包,版本號:3.2.0):鏈接: http://pan.baidu.com/s/1hq3s5EW 密碼: mvg7

1.生成二維碼的工具類

/*** 二維碼生成工具類*/ public class QRCodeUtil {/*** 生成二維碼Bitmap** @param content 內容* @param widthPix 圖片寬度* @param heightPix 圖片高度* @param logoBm 二維碼中心的Logo圖標(可以為null)* @param filePath 用于存儲二維碼圖片的文件路徑* @return 生成二維碼及保存文件是否成功*/public static boolean createQRImage(String content, int widthPix, int heightPix, Bitmap logoBm, String filePath) {try {if (content == null || "".equals(content)) {return false;}//配置參數Map<EncodeHintType, Object> hints = new HashMap<>();hints.put(EncodeHintType.CHARACTER_SET, "utf-8");//容錯級別hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);//設置空白邊距的寬度 // hints.put(EncodeHintType.MARGIN, 2); //default is 4// 圖像數據轉換,使用了矩陣轉換BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, widthPix, heightPix, hints);int[] pixels = new int[widthPix * heightPix];// 下面這里按照二維碼的算法,逐個生成二維碼的圖片,// 兩個for循環是圖片橫列掃描的結果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_8888Bitmap 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保存到文件中再進行讀取。直接返回的bitmap是沒有任何壓縮的,內存消耗巨大!return bitmap != null && bitmap.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(filePath));} catch (WriterException | IOException e) {e.printStackTrace();}return false;}/*** 在二維碼中間添加Logo圖案*/private static Bitmap addLogo(Bitmap src, Bitmap logo) {if (src == null) {return null;}if (logo == null) {return src;}//獲取圖片的寬高int srcWidth = src.getWidth();int srcHeight = src.getHeight();int logoWidth = logo.getWidth();int logoHeight = logo.getHeight();if (srcWidth == 0 || srcHeight == 0) {return null;}if (logoWidth == 0 || logoHeight == 0) {return src;}//logo大小為二維碼整體大小的1/5float scaleFactor = srcWidth * 1.0f / 5 / logoWidth;Bitmap bitmap = Bitmap.createBitmap(srcWidth, srcHeight, Bitmap.Config.ARGB_8888);try {Canvas canvas = new Canvas(bitmap);canvas.drawBitmap(src, 0, 0, null);canvas.scale(scaleFactor, scaleFactor, srcWidth / 2, srcHeight / 2);canvas.drawBitmap(logo, (srcWidth - logoWidth) / 2, (srcHeight - logoHeight) / 2, null);canvas.save(Canvas.ALL_SAVE_FLAG);canvas.restore();} catch (Exception e) {bitmap = null;e.getStackTrace();}return bitmap;}}2.在Activity中的使用:

/*** 二維碼生成*/ public class MainActivity extends ActionBarActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//內容final EditText contentET = (EditText) findViewById(R.id.create_qr_content);//顯示二維碼圖片final ImageView imageView = (ImageView) findViewById(R.id.create_qr_iv);//是否添加Logofinal CheckBox addLogoCB = (CheckBox) findViewById(R.id.create_qr_addLogo);Button createQrBtn = (Button) findViewById(R.id.create_qr_btn);createQrBtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {final String filePath = getFileRoot(MainActivity.this) + File.separator+ "qr_" + System.currentTimeMillis() + ".jpg";//二維碼圖片較大時,生成圖片、保存文件的時間可能較長,因此放在新線程中new Thread(new Runnable() {@Overridepublic void run() {boolean success = QRCodeUtil.createQRImage(contentET.getText().toString().trim(), 800, 800,addLogoCB.isChecked() ? BitmapFactory.decodeResource(getResources(), R.mipmap.qr_logo) : null,filePath);if (success) {runOnUiThread(new Runnable() {@Overridepublic void run() {imageView.setImageBitmap(BitmapFactory.decodeFile(filePath));}});}}}).start();}});}//文件存儲根目錄private String getFileRoot(Context context) {if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {File external = context.getExternalFilesDir(null);if (external != null) {return external.getAbsolutePath();}}return context.getFilesDir().getAbsolutePath();} }

3.本項目中圖片文件保存在

context.getExternalFilesDir(null)目錄之下的。按照官方的api文檔,從KitKat開始(Android 4.4),保存文件到這個目錄下將不需要SD卡讀寫權限。但是經過測驗表明,在紅米Note和魅族MX3上(系統均為android 4.4.4),的確不需要權限;但是在本人的華為P6上(Android 4.4.2),必須聲明權限才能成功的保存文件,即必須在manifest中添加如下內容:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />因此,個人猜測,所謂的不需要權限是從 Android 4.4.4開始的。





總結

以上是生活随笔為你收集整理的Android:使用ZXing生成二维码(支持添加Logo图案)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲射图| 三上悠亚人妻中文字幕在线 | 林雅儿欧洲留学恋爱日记在线 | 久久精品国产视频 | 午夜快播 | 色无极亚洲| 葵司av电影| 久草在在线| 宝贝乖h调教灌尿穿环 | www.com久久| 一本一道av无码中文字幕 | 欧美乱轮 | 国产成人一区二区三区 | 国产精品视频一区二区在线观看 | 国产美女永久免费无遮挡 | www.xxx.日本| 91精品视频免费在线观看 | 无码gogo大胆啪啪艺术 | 色图综合 | 亚洲精品国产精华液 | 天堂va蜜桃一区二区三区漫画版 | 久久九九热 | 国偷自产av一区二区三区麻豆 | 最近免费中文字幕大全免费版视频 | 奴色虐av一区二区三区 | 特黄特黄视频 | 国产毛片一区二区 | 午夜爽爽爽 | 日本一区二区三区精品视频 | 我要色综合网 | 成人影音在线 | 激情五月综合色婷婷一区二区 | 在线视频观看一区二区 | 国产黄色特级片 | 久久久精品国产 | 第四色在线视频 | 在线看中文字幕 | 国产精品久久久久久久久久久久久久久 | 欧美天天影院 | 三上悠亚人妻中文字幕在线 | 久久国产精品国语对白 | 青青操视频在线观看 | 夜色快播 | 国产一级av毛片 | 波多野结衣一区二区三区高清av | 一区视频免费观看 | 美利坚合众国av | 国产精品第56页 | 婷婷色激情| 波多野结衣潜藏淫欲 | 亚洲男人影院 | 4444亚洲人成无码网在线观看 | 日韩福利一区 | 毛片毛片毛片毛片毛片毛片毛片 | 国产午夜福利100集发布 | 黄色aaa视频| 日韩av在线天堂 | 精品小视频在线观看 | 神马久久精品 | 国产精品99久久免费黑人人妻 | wwwxx国产| 中文字幕在线官网 | 日韩国产综合 | 亚洲va久久久噜噜噜久久天堂 | 国产一区不卡视频 | 极品美妇后花庭翘臀娇吟小说 | 精品一区李梓熙捆绑 | 欧美一区二区三区免费观看 | 一区二区视频在线观看 | 日韩精品免费一区二区 | 吻胸摸激情床激烈视频大胸 | a级一级片 | 天天操综合网 | 91网站在线免费观看 | 国产又黄又猛视频 | 日本美女日批视频 | 久久综合激的五月天 | 免费在线性爱视频 | 国产成人自拍在线 | 免费在线亚洲 | www视频免费在线观看 | 精品人妻无码一区二区三区换脸 | 色多多在线看 | 久久99精品久久久久婷婷 | 亚洲a中文字幕 | 国产传媒在线视频 | 免费看黄网站在线观看 | 国产精品久久午夜夜伦鲁鲁 | 调教在线观看 | 中文字幕一区二区三区乱码 | 九色影院| 国产偷自拍 | 成人拍拍| 99久久精品国产色欲 | 自拍欧美亚洲 | 打屁股外国网站 | 第一av在线 | 在线免费视频一区二区 | 欧美日韩激情 |