最近看到彩色二维码挺有意思,感觉我们常见的黑色二维码有些单调。

看了一下大牛们的博客,这里在大牛的基础上更改了一下。做了一个有颜色渐变的二维码。

在这里记录一下自己的学习成果。我这里用的是zxing-4.7.5.jar。

效果图如下:

直接上代码了

package com.yaojian.qrcode;
import java.util.Hashtable;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PaintFlagsDrawFilter;
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;
/**
* @ClassName: QRCodeUtils
* @Description: zxing生成二维码工具,可带logo,可调颜色。
* @author yaojian
*/
public class QRCodeUtils {
/**
* 根据指定内容生成自定义宽高的二维码图片
*
* param content 需要生成二维码的内容
* param width 二维码宽度
* param height 二维码高度
*/
public static Bitmap makeQRImage(String content, int QR_WIDTH, int QR_HEIGHT) {
return makeQRImage(content, QR_WIDTH, QR_HEIGHT, null);
}
/**
* 根据指定内容生成自定义宽高的二维码图片
*
* param logoBm logo图标
* param content 需要生成二维码的内容
* param width 二维码宽度
* param height 二维码高度
*/
public static Bitmap makeQRImage(String content, int QR_WIDTH,
int QR_HEIGHT, Bitmap logoBmp) {
try {
// 图像数据转换,使用了矩阵转换
Hashtablehints = new Hashtable();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);// 容错级别
// 设置空白边距的宽度
hints.put(EncodeHintType.MARGIN, 2); // default is 4
hints.put(EncodeHintType.MAX_SIZE, 350);
hints.put(EncodeHintType.MIN_SIZE, 100);
BitMatrix bitMatrix = new QRCodeWriter().encode(content,
BarcodeFormat.QR_CODE, QR_WIDTH, QR_HEIGHT, hints);
int[] pixels = new int[QR_WIDTH * QR_HEIGHT];
// 下面这里按照二维码的算法,逐个生成二维码的图片
// 两个for循环是图片横列扫描的结果
// 设置二维码颜色渐变
int[] rgb = setGradientColor("#03a9f4");
for (int y = 0; y < QR_HEIGHT; y++) {
for (int x = 0; x < QR_WIDTH; x++) {
if (bitMatrix.get(x, y)) {
// 二维码颜色设置
if (x > 0 && x < 110 && y > 0 && y < 110) {
Color color = new Color();
int colorInt = color.parseColor("#e79138");
pixels[y * QR_WIDTH + x] = bitMatrix.get(x, y) ? colorInt
: 16777215;
} else {
// 设置二维码颜色渐变
int r = (int) (rgb[0] - (rgb[0] - 13.0)
/ bitMatrix.getHeight() * (y + 1));
int g = (int) (rgb[1] - (rgb[1] - 72.0)
/ bitMatrix.getHeight() * (y + 1));
int b = (int) (rgb[2] - (rgb[2] - 107.0)
/ bitMatrix.getHeight() * (y + 1));
Color color = new Color();
int colorInt = color.argb(255, r, g, b);
pixels[y * QR_WIDTH + x] = bitMatrix.get(x, y) ? colorInt
: 16777215;
}
} else {
pixels[y * QR_WIDTH + x] = 0xffffffff;// 白色
}
}
}
// ------------------添加logo部分------------------//
Bitmap bitmap = Bitmap.createBitmap(QR_WIDTH, QR_HEIGHT,
Bitmap.Config.ARGB_8888);
// 设置像素点
bitmap.setPixels(pixels, 0, QR_WIDTH, 0, 0, QR_WIDTH, QR_HEIGHT);
if (logoBmp == null) {
return bitmap;
}
// 获取图片宽高
int logoWidth = logoBmp.getWidth();
int logoHeight = logoBmp.getHeight();
if (QR_WIDTH == 0 || QR_HEIGHT == 0) {
return null;
}
if (logoWidth == 0 || logoHeight == 0) {
return bitmap;
}
// 图片绘制在二维码中央,合成二维码图片
// logo大小为二维码整体大小的1/4
float scaleFactor = QR_WIDTH * 1.0f / 4 / logoWidth;
try {
Canvas canvas = new Canvas(bitmap);
canvas.setDrawFilter(new PaintFlagsDrawFilter(0,
Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG));
canvas.drawBitmap(bitmap, 0, 0, null);
canvas.scale(scaleFactor, scaleFactor, QR_WIDTH / 2,
QR_HEIGHT / 2);
canvas.drawBitmap(logoBmp, (QR_WIDTH - logoWidth) / 2,
(QR_HEIGHT - logoHeight) / 2, null);
canvas.save(Canvas.ALL_SAVE_FLAG);
canvas.restore();
return bitmap;
} catch (Exception e) {
bitmap = null;
e.getStackTrace();
}
} catch (WriterException e) {
e.printStackTrace();
}
return null;
}
private static int[] setGradientColor(String colorStr) {
int[] rgbs = new int[3];
rgbs[0] = Integer.parseInt(colorStr.substring(1, 3), 16);
rgbs[1] = Integer.parseInt(colorStr.substring(3, 5), 16);
rgbs[2] = Integer.parseInt(colorStr.substring(5, 7), 16);
return rgbs;
}
}

相关文章:

http://www.open-open.com/lib/view/open1433399323182.html

http://blog.csdn.net/cq1982/article/details/45620741

http://blog.csdn.net/gao36951/article/details/41149049

http://wenku.baidu.com/link?url=kYJw8F8uQmMlOuo3zmg4Sx886RiCiglOAis55Kf5OjqtxSgnN55Ce5OLzYjuWsaZrOBKMyDUFAcwbXXjveXotZ9Q_bHEBPlQ7LuldY0LUYi

Android彩色二维码带logo相关推荐

  1. asp.net 生成二维码,带logo,带下方文字

    目标可以生成带网址的信息的二维码,可以是带logo 或者不带logo,或者下方带一行说明文字 nuget 下载二维码管理包 public static Bitmap GenerateQrCode(st ...

  2. zxing 生成二维码 带logo

    ·1生成带logo的二维码,并转base64 public static String generateBase64Img(String code_url,int width,int height,S ...

  3. [Java] Java生成二维码带LOGO, LOGO加圆角白框

    先来看看效果: 实现: 生成指定文字内容的二维码 二维码中间嵌入LOGO 二维码做圆角和白色边框处理 新需求不断, 这不, 又来了个想生成带用户头像的需求. 蛮简单的- 在这里造完轮子分享给大家 因为 ...

  4. ZXing3.3.3 生成二维码带logo

    一.前言 我们这里对ZXing不做过多介绍,不清楚的小伙伴可以自行百度. 直接进入正题,这里会封装成工具使用: 二.Hutool工具包+ZXing 这里我们使用Hutool工具包+ZXing,Huto ...

  5. Java生成二维码带LOGO底部标题竖版字体

    前言 Java后端生成二维码 底部 侧面带有标题,可调节字号 参考文章 使用Java生成二维码图片(亲测) Reborn_YY使用Java生成二维码图片 图标素材库 Java后台生成图片,前台实现图片 ...

  6. java生成二维码(带logo)

    利用hutool工具实现java二维码生成 官网链接:https://www.hutool.cn/ 添加依赖 <dependency><groupId>cn.hutool< ...

  7. vue 生成二维码(带logo)与条形码

    1.生成二维码安装 npm install  --save qrcodejs 实现代码 <template><div><qrcode :url="jmc&quo ...

  8. java生成二维码(在图片上生成二维码(二维码带logo)并且在图片上添加文字标签)

    1pom.xml <!--生成二维码--> <dependency><groupId>cn.hutool</groupId><artifactId ...

  9. android加载二维码带中间logo

    android加载二维码带中间logo 很简单的,我也是先看了很多博客,然后总结了一下,感谢万能的网友 1导入依赖 //二维码加载依赖 implementation 'com.google.zxing ...

最新文章

  1. 【数据挖掘】关联规则挖掘 Apriori 算法 ( 关联规则 | 数据项支持度 | 关联规则支持度 )
  2. JavaScript(JS)之简单介绍
  3. 项目管理怎样游刃有余
  4. 实现Parcelable接口
  5. AI赋能红外测温助力精准防控疫情……
  6. Spring Boot EasyPoi导出Excel下载
  7. 自制口袋妖怪_承诺和口袋妖怪-我如何学会异步思考
  8. java 获取路径_java 获取当前类的路径
  9. mysql查询删除重复数据
  10. 2019-09-30
  11. Android----- MD5加密(登录注册得到与IOS相同的加密值,并且解决两个平台汉字加密不相同问题)...
  12. Hackintool 3.4.7中文版 (黑苹果必备工具箱神器)
  13. 飞鱼服务器 微信,飞鱼微信客服系统软件
  14. OpenStack+Ceph集群 虚机实例扩容
  15. 涨知识!芯片是怎么做出来的,今天终于看懂了
  16. 我们不曾向这个世界的庸俗低头!!!
  17. 【狂神说Java】Git最新教程通俗易懂
  18. 关于PD4ML解决中文乱码的问题
  19. 计算机软故障无法开机,电脑常见的开机故障及解决方法的详解
  20. 统考计算机英语通过率,网络教育统考英语难考吗 通过率怎么样

热门文章

  1. 什么是DHCP(接口模式+全局模式)
  2. Indesign快捷键大全
  3. 01-4 哪些指令不能重排:Happen-Before规则
  4. 找工作的“金三银四”,如何准备一份独特的“简历”
  5. 技术分享:与阻焊开窗等大的“D”字型异型焊盘PCB电测工艺研究
  6. 头部底部通栏,内容区域滚动布局
  7. mysql cacti_使用Cacti监控MySQL
  8. 如何初始window的注册表,恢复默认设置
  9. 服务器和硬盘阵列,存储服务器与磁盘阵列组之间区别介绍
  10. 未来光通信迈入多通道集成时代,泰克助力上海交大搭建下一代光通信研发平台