用ZXING生成二维码的工具类(可以去掉白边,添加logo)
===========================用ZXING生成二维码的工具类(可以去掉白边,添加logo)==========================
/**
* @auther gjc
* @since 2016/12/27.
*/
public class CreateCodeUtil {
public static Bitmap createQRImage(String str, int width, int height, Bitmap logoBm) {
try {
Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
// hints.put(EncodeHintType.MARGIN, 1);
BitMatrix matrix = new QRCodeWriter().encode(str, BarcodeFormat.QR_CODE, width, height);
matrix = deleteWhite(matrix);//删除白边
width = matrix.getWidth();
height = matrix.getHeight();
int[] pixels = new int[width * height];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
if (matrix.get(x, y)) {
pixels[y * width + x] = Color.BLACK;
} else {
pixels[y * width + x] = Color.WHITE;
}
}
}
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
bitmap = addLogo(bitmap, logoBm);
return bitmap;
} catch (Exception e) {
return null;
}
}
/**
* 删除白边
* */
private static BitMatrix deleteWhite(BitMatrix matrix) {
int[] rec = matrix.getEnclosingRectangle();
int resWidth = rec[2] + 1;
int resHeight = rec[3] + 1;
BitMatrix resMatrix = new BitMatrix(resWidth, resHeight);
resMatrix.clear();
for (int i = 0; i < resWidth; i++) {
for (int j = 0; j < resHeight; j++) {
if (matrix.get(i + rec[0], j + rec[1]))
resMatrix.set(i, j);
}
}
return resMatrix;
}
/**
* 在二维码中间添加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/5
float 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;
}
}
用ZXING生成二维码的工具类(可以去掉白边,添加logo)相关推荐
- java通过QR生成二维码 (QRCodeUtils工具类)(HUTOOL生成二维码)
1.简述 二维码生成关键是QR,QR码属于矩阵式二维码中的一个种类,由DENSO(日本电装)公司开发,由JIS和ISO将其标准化 详情简介请看 2.工具类 package com.lingxu.bas ...
- java利用zxing生成二维码
什么是ZXing? ZXing是一个开源的,用Java实现的多种格式的1D/2D条码图像处理库. 利用ZXing这个工具库来生成二维码,具体操作如下: 引入相关资源包 <dependency&g ...
- Spring Boot电商项目57:订单模块六:【前台:生成支付二维码】接口;(支付url的拼凑;利用zxing生成二维码;二维码图片的存储;真实地址与可访问地址的转换;)
说明: (1)本篇博客主要内容是:开发[前台:生成支付二维码]接口: (2)本篇博客需要注意的点有: ● 支付url的拼凑: ● 利用zxing生成二维码: ● 二维码图片的存储:真实地址与可访问地址 ...
- Zxing 生成二维码和条形码去掉白边
源码下载: https://github.com/AndroidZmm123/ZxingApplication 需求:根据输入内容,生成条形码或者二维码. 我们大多数会选择Zxing.因为jar包较小 ...
- Android:使用ZXing生成二维码(支持添加Logo图案)
ZXing是谷歌的一个开源库,可以用来生成二维码.扫描二维码.本文所介绍的是第一部分. 首先上效果图: ZXing相关各种文件官方下载地址:https://github.com/zxing/zxing ...
- Zxing生成二维码思路和源码解析
Zxing生成二维码思路和源码解析 本博文是一篇介绍google zxing包生成二维码的思路和它的源码的文章. 一.引入 如何调用zxing的代码生成一个二维码呢?主要的函数只有一个,如下所示: B ...
- zxing 生成二维码,可设置logo、二维码颜色、白边大小
主要是使用google的zxing 生成二维码,可设置logo.二维码前景色/后景色.白边大小.二维码大小 1.用到jar包 <dependency><groupId>com. ...
- 基于zxing生成二维码
目录 1.二维码的原理 2.基于zxing生成二维码 3.逻辑及其应用 完整代码:https://github.com/122537067/zxingQRcodeLogoColor 效果图: 1.二维 ...
- 使用zxing生成二维码
使用zxing批量在做好的立牌背景图的指定位置上,把指定的文本内容(链接地址.文本等)生成二维码并放在该位置, 最后加上立牌编号. 步骤: 1).做好背景图,如下图: 扫一扫添加关注 2).生成二维码 ...
最新文章
- 他山之石:Github的使用
- 静态Web服务器-返回固定页面数据
- 这10道springboot常见面试题你需要了解下
- 【机器学习】24个终极项目提升您的机器学习知识和技能
- python保存至对应目录_python如何实现复制目录到指定目录
- P1056 排座椅(模拟)
- cf1504. Travelling Salesman Problem
- JavaFX 8的弹出式编辑器
- 微服务网关总结之 —— zuul
- Android系统onKeyDown监控/拦截/监听/屏蔽返回键、菜单键和Home键
- 协同办公OA系统 沉淀企业文化
- 【比赛】新冠肺炎疫情趋势预测大赛~推荐大家参加下
- 转载——如果让我完善几年前的一个项目,我会做哪些改进?
- synchronized关键字的4种用法
- IntelliJ IDEA 设置主题背景
- 【光剑藏书轩2021】《表象与本质:类比,思考之源和思维之火》
- LimeSurvey的使用和简单的二次开发
- java 获取剪切板文件_如何在Java程序中读写系统剪切板的数据
- python xgboost建模过程_机器学习——XGBoost大杀器,XGBoost模型原理,XGBoost参数含义...
- mysql存储移动端emoji表情 报错Incorrect string value: '\xF0\x9F\x98\x82'