当前位置: 首页 > news >正文

Android 二维码相关(一)

Android 二维码相关(一)

本篇文章主要记录下android下使用zxing来创建二维码.

1: 导入依赖

api "com.google.zxing:core:3.5.1"

2: 创建二维码

  1. 创建QRCodeWriter对象

    QRCodeWriter qrCodeWriter = new QRCodeWriter();	
    
  2. 将文本内容转换成BitMatrix

    BitMatrix encode = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, size, size);
    
  3. 创建bitmap

    Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.RGB_565);
    
  4. 将BitMatrix渲染到bitmap

    for (int x = 0; x < size; x++) {for (int y = 0; y < size; y++) {//将BitMatrix渲染到bitmapbitmap.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渲染到bitmapbitmap.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;
}

相关文章:

  • 微信小程序修改placeholder样式
  • Java必须掌握的B树知识点(含面试大厂题含源码)
  • PyTorch搭建LeNet训练集详细实现
  • C语言:内存函数
  • 向ChatGPT高效提问模板
  • DAY by DAY 史上最全的Linux常用命令汇总----命令格式
  • 微信小程序返回上一页刷新组件数据
  • NVMFS5A160PLZT1G汽车级功率MOSFET P沟道60 V 15A 满足AEC-Q101标准
  • 【Logback】Logback 中的 Appenders
  • C#使用Stack<T>类进行堆栈设计
  • Mybatis Plus + Spring 分包配置 ClickHouse 和 Mysql 双数据源
  • 【零基础学习04】嵌入式linux驱动中信号量功能基本实现
  • 网工内推 | 国企、上市公司网工、运维,CCNA即可,补贴福利多
  • IP数据报格式
  • 数据结构导航 -- 38篇
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • HTTP中GET与POST的区别 99%的错误认识
  • Joomla 2.x, 3.x useful code cheatsheet
  • Mysql数据库的条件查询语句
  • PaddlePaddle-GitHub的正确打开姿势
  • Python连接Oracle
  • Redis在Web项目中的应用与实践
  • spark本地环境的搭建到运行第一个spark程序
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 安卓应用性能调试和优化经验分享
  • 关于for循环的简单归纳
  • 简单数学运算程序(不定期更新)
  • 免费小说阅读小程序
  • 前端攻城师
  • 前端性能优化——回流与重绘
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 用Canvas画一棵二叉树
  • #QT(串口助手-界面)
  • #每天一道面试题# 什么是MySQL的回表查询
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • #在 README.md 中生成项目目录结构
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (Git) gitignore基础使用
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (十六)一篇文章学会Java的常用API
  • (算法设计与分析)第一章算法概述-习题
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (五)关系数据库标准语言SQL
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .Net Core与存储过程(一)
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @html.ActionLink的几种参数格式
  • @RequestMapping处理请求异常
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现