Android 二维码相关(一)
本篇文章主要记录下android下使用zxing来创建二维码.
1: 导入依赖
api "com.google.zxing:core:3.5.1"
2: 创建二维码
-
创建QRCodeWriter对象
QRCodeWriter qrCodeWriter = new QRCodeWriter();
-
将文本内容转换成BitMatrix
BitMatrix encode = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, size, size);
-
创建bitmap
Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.RGB_565);
-
将BitMatrix渲染到bitmap
for (int x = 0; x < size; x++) { for (int y = 0; y < size; y++) { //将BitMatrix渲染到bitmap bitmap.setPixel(x, y, encode.get(x, y) ? Color.BLACK : Color.WHITE); } }
完整的代码如下:
public class QRCodeUtils {
private static final String TAG = "QRCodeUtils";
/**
* @param content 字符串内容
* @param size 位图宽&高(单位:px)
* @return
*/
public static Bitmap createQRCodeBitmap(String content, int size) {
if (TextUtils.isEmpty(content)) return null;
if (size <= 0) return null;
//创建QRCodeWriter对象
QRCodeWriter qrCodeWriter = new QRCodeWriter();
try {
//使用QRCodeWriter将文本内容转换成BitMatrix.
BitMatrix encode = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, size, size);
Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.RGB_565);
for (int x = 0; x < size; x++) {
for (int y = 0; y < size; y++) {
//将BitMatrix渲染到bitmap
bitmap.setPixel(x, y, encode.get(x, y) ? Color.BLACK : Color.WHITE);
}
}
return bitmap;
} catch (Throwable e) {
Log.e(TAG, "createQRCodeBitmap: ", e);
}
return null;
}
}
3: 给二维码添加logo
给二维码添加logo 与上篇文章添加水印类似.
都是通过canvas重新绘制,合成图片.
具体的代码如下:
/**
* @param srcBitmap 二维码
* @param logoBitmap 二维码logo
* @param logoPercent 二维码logo的占比 [0,1]
* @return
*/
public static Bitmap addQRCodeLogo(Bitmap srcBitmap, Bitmap logoBitmap, float logoPercent) {
//校验参数合法
if (srcBitmap == null) return null;
if (logoBitmap == null) return srcBitmap;
if (logoPercent < 0 || logoPercent > 1) logoPercent = 0.2f;
//原图/logo的宽高
int srcWidth = srcBitmap.getWidth();
int srcHeight = srcBitmap.getHeight();
int logoHeight = logoBitmap.getHeight();
int logoWidth = logoBitmap.getWidth();
//缩放
float scaleWidth = srcWidth * logoPercent / logoWidth;
float scaleHeight = srcHeight * logoPercent / logoHeight;
//使用Canvas绘制
Bitmap bitmap = Bitmap.createBitmap(srcWidth, srcHeight, Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
canvas.drawBitmap(srcBitmap, 0, 0, null);
canvas.scale(scaleWidth, scaleHeight, srcWidth / 2, srcHeight / 2);
canvas.drawBitmap(logoBitmap, srcWidth / 2-logoWidth/2, srcHeight / 2-logoHeight/2, null);
return bitmap;
}
新增创建二维码方法:
/**
* @param content 字符串内容
* @param size 位图宽&高(单位:px)
* @param logo 二维码logo
* @param logoPercent 二维码logo的占比 [0,1]
* @return
*/
public static Bitmap createQRCodeBitmap(String content, int size, Bitmap logo, float logoPercent) {
Bitmap qrCodeBitmap = createQRCodeBitmap(content, size);
Bitmap bitmap = addQRCodeLogo(qrCodeBitmap, logo, logoPercent);
return bitmap;
}
本文由博客一文多发平台 OpenWrite 发布!
玄机博客
© 版权声明
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
THE END
暂无评论内容