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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

zxing生成带logo的二维码

發布時間:2024/1/8 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 zxing生成带logo的二维码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

倒Zxing依賴

implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.2.1'

代碼段

import android.graphics.Bitmap; import android.graphics.Matrix;import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import java.util.Hashtable; public class QRCode {private static int MY_WIDTH = 50;//寬度值,影響中間圖片大小/*** 生成二維碼,默認大小為500*500** @param text 需要生成二維碼的文字、網址等* @return bitmap*/ public static Bitmap createQRCode(String text) {return createQRCode(text, 500); }/*** 生成二維碼** @param text 需要生成二維碼的文字、網址等* @param size 需要生成二維碼的大小()* @return bitmap*/ public static Bitmap createQRCode(String text, int size) {try {Hashtable<EncodeHintType, String> hints = new Hashtable<>();hints.put(EncodeHintType.CHARACTER_SET, "utf-8");BitMatrix bitMatrix = new QRCodeWriter().encode(text,BarcodeFormat.QR_CODE, size, size, hints);int[] pixels = new int[size * size];for (int y = 0; y < size; y++) {for (int x = 0; x < size; x++) {if (bitMatrix.get(x, y)) {pixels[y * size + x] = 0xff000000;} else {pixels[y * size + x] = 0xffffffff;}}}Bitmap bitmap = Bitmap.createBitmap(size, size,Bitmap.Config.ARGB_8888);bitmap.setPixels(pixels, 0, size, 0, 0, size, size);return bitmap;} catch (WriterException e) {e.printStackTrace();return null;} }/*** 生成帶logo的二維碼,默認二維碼的大小為500,logo為二維碼的1/5** @param text 需要生成二維碼的文字、網址等* @param mBitmap logo文件* @return bitmap*/ public static Bitmap createQRCodeWithLogo(String text, Bitmap mBitmap) {return createQRCodeWithLogo(text, 500, mBitmap); }/*** 生成帶logo的二維碼,logo默認為二維碼的1/5** @param text 需要生成二維碼的文字、網址等* @param size 需要生成二維碼的大小()* @param mBitmap logo文件* @return bitmap*/ public static Bitmap createQRCodeWithLogo(String text, int size, Bitmap mBitmap) {try {MY_WIDTH = size / 10;Hashtable<EncodeHintType, Object> hints = new Hashtable<>();hints.put(EncodeHintType.CHARACTER_SET, "utf-8");/** 設置容錯級別,默認為ErrorCorrectionLevel.L* 因為中間加入logo所以建議你把容錯級別調至H,否則可能會出現識別不了*/hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);BitMatrix bitMatrix = new QRCodeWriter().encode(text,BarcodeFormat.QR_CODE, size, size, hints);int width = bitMatrix.getWidth();//矩陣高度int height = bitMatrix.getHeight();//矩陣寬度int halfW = width / 2;int halfH = height / 2;Matrix m = new Matrix();float sx = (float) 2 * MY_WIDTH / mBitmap.getWidth();float sy = (float) 2 * MY_WIDTH/ mBitmap.getHeight();m.setScale(sx, sy);//設置縮放信息//將logo圖片按martix設置的信息縮放mBitmap = Bitmap.createBitmap(mBitmap, 0, 0,mBitmap.getWidth(), mBitmap.getHeight(), m, false);int[] pixels = new int[size * size];for (int y = 0; y < size; y++) {for (int x = 0; x < size; x++) {if (x > halfW - MY_WIDTH && x < halfW + MY_WIDTH&& y > halfH - MY_WIDTH&& y < halfH + MY_WIDTH) {//該位置用于存放圖片信息//記錄圖片每個像素信息pixels[y * width + x] = mBitmap.getPixel(x - halfW+ MY_WIDTH, y - halfH + MY_WIDTH);} else {if (bitMatrix.get(x, y)) {pixels[y * size + x] = 0xff000000;} else {pixels[y * size + x] = 0xffffffff;}}}}Bitmap bitmap = Bitmap.createBitmap(size, size,Bitmap.Config.ARGB_8888);bitmap.setPixels(pixels, 0, size, 0, 0, size, size);return bitmap;} catch (WriterException e) {e.printStackTrace();return null;} } }

Activity里面要寫的代碼

public class MainActivity extends AppCompatActivity {ImageView imageView; Button button;@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);imageView = findViewById(R.id.images);button = findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String contnet="啊哈"; //二維碼的內容Bitmap bitmap = QRCode.createQRCodeWithLogo(contnet, 500,BitmapFactory.decodeResource(getResources(), R.drawable.yan));//用背景圖接受二維碼imageView.setImageBitmap(bitmap);}}); } }

布局

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="生成二維碼"/><ImageViewandroid:id="@+id/images"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/yan"android:layout_centerInParent="true"/> </RelativeLayout>

總結

以上是生活随笔為你收集整理的zxing生成带logo的二维码的全部內容,希望文章能夠幫你解決所遇到的問題。

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