当前位置: 首页 > 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;
}

相关文章:

Android 二维码相关(一)

Android 二维码相关(一) 本篇文章主要记录下android下使用zxing来创建二维码. 1: 导入依赖 api "com.google.zxing:core:3.5.1"2: 创建二维码 创建QRCodeWriter对象 QRCodeWriter qrCodeWriter new QRCodeWriter(); 将文本内容转换成BitMatrix BitMatrix encode …...

利用tree命令自动保存文件层级结构

tree命令的使用 为了将上图左侧的文件目录&#xff0c;生成上图右侧中的文件夹结构列表&#xff0c;保存在txt中&#xff0c;使用了如下cmd命令&#xff1a; C:\armadillo-12.8.0>tree .>list.txt以上tree命令分为3部分&#xff1a; tree 命令. 在当前目录>list.tx…...

C++初阶:内存管理

目录 1. C/C中各种资源的内存分布1.1 C/C程序内存区域划分1.2 各资源的内存分布情况&#xff08;练习&#xff09; 2. C中的动态内存管理方式2.1 new/delete开辟内置类型空间2.2 new/delete开辟销毁自定义类型空间 3. operator new 与 operator delete函数4. new与delete的实现…...

vue和react的diff算法源码

Vue.js 中的虚拟 DOM Diff 算法是其性能优化的关键之一。 Vue.js 的 Diff 算法主要基于 Snabbdom&#xff0c;以下是 Vue.js 中虚拟 DOM Diff 算法的简化版伪代码&#xff0c;以便说明其基本思想&#xff1a; function patch(oldVnode, vnode) {// 如果 oldVnode 不存在&…...

Coordinate Attention(CVPR 2021)

paper&#xff1a;Coordinate Attention for Efficient Mobile Network Design official implementation&#xff1a;GitHub - houqb/CoordAttention: Code for our CVPR2021 paper coordinate attention 背景 注意力机制&#xff0c;已经被广泛用于提高深度神经网络的性能&…...

计算机网络-第4章 网络层(2)

主要内容&#xff1a;网络层提供的两种服务&#xff1a;虚电路和数据报&#xff08;前者不用&#xff09;、ip协议、网际控制报文协议ICMP、路由选择协议&#xff08;内部网关和外部网关&#xff09;、IPv6,IP多播&#xff0c;虚拟专用网、网络地址转换NAT&#xff0c;多协议标…...

重学SpringBoot3-WebMvcAutoConfiguration类

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-WebMvcAutoConfiguration类 是什么什么用生效条件作用 自定义配置的三种方式自定义配置举例1. 自定义 DispatcherServlet 配置2. 静态资源配置3. 自定义…...

探索数据结构:深入了解顺序表的奥秘

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 什么是顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元…...

苍穹外卖学习-----2024/03/010---redis,店铺营业状态设置

1.Redis入门 2.在Java中操作Redis 3.店铺营业状态设置 BUG!!! 今天在启动项目时&#xff0c;用到了Redis缓存数据库&#xff0c;但是却出现了报错信息&#xff1a; ERR Client sent AUTH, but no password is set。Caused by: io.lettuce.core.RedisCommandExecutionException…...

RUST 每日一省:发布到crates.io

github是开源代码分享的地方&#xff0c;rust的开源项目除了github&#xff0c;我们还可以将其发布到 crates.io 上&#xff0c;然后其它用户就可以使用cargo进行安装使用了。其实步骤很简单&#xff0c;只有三条命令了&#xff0c;我们一次来看一下。 1、cargo package 首先&a…...

String类及其常用方法

文章目录 1.String类的特性与使用1.1 String类的特性1.2 String对象的创建方式1.3 String 的使用&#xff08;不同的拼接操作&#xff09; 2.String常用方法2.1 String的常用方法一2.2 String常用方法二2.3 String常用方法三 1.String类的特性与使用 1.1 String类的特性 Stri…...

1094. 拼车

说在前面 &#x1f388;不知道大家对于算法的学习是一个怎样的心态呢&#xff1f;为了面试还是因为兴趣&#xff1f;不管是出于什么原因&#xff0c;算法学习需要持续保持。 题目描述 车上最初有 capacity 个空座位。车 只能 向一个方向行驶&#xff08;也就是说&#xff0c;不…...

Docker进阶:深入了解容器数据卷

Docker进阶&#xff1a;深入了解容器数据卷 一、前言二、容器数据卷的作用三、容器数据卷的使用方法四、实战--使用docker部署前端项目&#xff08;数据卷挂载&#xff09;4.1 重要&#xff1a;准备工作&#xff0c;先在本地创建挂载目录4.2 启动一个临时的nginx容器&#xff0…...

升级版本彻底解决bootstrap-table-fixed-columns固定列后行对不齐问题

升级到bootstrap-table和bootstrap-table-fixed-columns版本都升级到v1.22.3版本以上&#xff0c;即可解决该问题 bootstrap-table&#xff1a;bootstrap-table/dist/bootstrap-table.min.css at develop wenzhixin/bootstrap-table GitHub bootstrap-table-fixed-columns&…...

打破边界:深入探索STUN在实现无缝NAT穿越和WebRTC通信中的核心作用

引言 STUN是一个网络协议&#xff0c;设计用于帮助在网络地址转换&#xff08;NAT&#xff09;后面的设备发现其公网地址和端口号。通过允许这些设备发现自己从外部看到的地址&#xff0c;STUN使得它们能够在NAT或防火墙背后建立端到端的通信&#xff0c;这对于VoIP、视频会议…...

浅谈 前端的动态绑定属性

目录 前言1. 基本知识2. Demo 前言 作为Java开发者&#xff0c;从开发转到全栈&#xff0c;前端好些细节都需要科普&#xff0c;这不就来个动态绑定属性 起因是这个&#xff1a; <uni-tr> <uni-td align"center" :rowspan"checkTypesCount 1"…...

Sklearn支持向量机

支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种常用的分类算法&#xff0c;它可以用于解决二分类和多分类问题。在Python中&#xff0c;你可以使用Sklearn库来实现SVM。下面是一个简单的例子&#xff0c;展示了如何使用Sklearn进行SVM分类。 # 导入必要…...

【Lazy ORM】 小工具 acw 本地客户端 你负责点击页面,他负责输出代码

介绍 wu-smart-acw-client 简称acw-client&#xff0c;是一个基于Lazy ORM定制的客户端代码生成小工具 Lazy ORM 小工具 acw 本地客户端 你负责点击页面&#xff0c;他负责输出代码安装 <dependency><groupId>top.wu2020</groupId><artifactId>wu-sma…...

《详解:鸿蒙NEXT开发核心技术》

我们现在都知道鸿蒙作为一个国产的全栈自研系统&#xff0c;经过国家主推后。已经引起人们很大的关注&#xff0c;其中作为开发者来说&#xff1b;许多一线大厂已经与其华为鸿蒙展开原生应用的合作了&#xff0c;目前了解到已经有200家。而之后出现了很多的高薪鸿蒙开发岗位&am…...

快速排序 刷题笔记

思路 分治双指针 在每个区间选定一个基准目标 两个指针从数组的两边向中间推进 使用 while循环判断 do {i;}while(q[i]<x); do{j--;}while(q[j]>x); 每次这样做完就会找到q[i]>x,,,,q[j]小于x 此时我们交换 q[i] ,q[j]于是小于x的数分到了小于x的一侧 大…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...