===========================用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)相关推荐

  1. java通过QR生成二维码 (QRCodeUtils工具类)(HUTOOL生成二维码)

    1.简述 二维码生成关键是QR,QR码属于矩阵式二维码中的一个种类,由DENSO(日本电装)公司开发,由JIS和ISO将其标准化 详情简介请看 2.工具类 package com.lingxu.bas ...

  2. java利用zxing生成二维码

    什么是ZXing? ZXing是一个开源的,用Java实现的多种格式的1D/2D条码图像处理库. 利用ZXing这个工具库来生成二维码,具体操作如下: 引入相关资源包 <dependency&g ...

  3. Spring Boot电商项目57:订单模块六:【前台:生成支付二维码】接口;(支付url的拼凑;利用zxing生成二维码;二维码图片的存储;真实地址与可访问地址的转换;)

    说明: (1)本篇博客主要内容是:开发[前台:生成支付二维码]接口: (2)本篇博客需要注意的点有: ● 支付url的拼凑: ● 利用zxing生成二维码: ● 二维码图片的存储:真实地址与可访问地址 ...

  4. Zxing 生成二维码和条形码去掉白边

    源码下载: https://github.com/AndroidZmm123/ZxingApplication 需求:根据输入内容,生成条形码或者二维码. 我们大多数会选择Zxing.因为jar包较小 ...

  5. Android:使用ZXing生成二维码(支持添加Logo图案)

    ZXing是谷歌的一个开源库,可以用来生成二维码.扫描二维码.本文所介绍的是第一部分. 首先上效果图: ZXing相关各种文件官方下载地址:https://github.com/zxing/zxing ...

  6. Zxing生成二维码思路和源码解析

    Zxing生成二维码思路和源码解析 本博文是一篇介绍google zxing包生成二维码的思路和它的源码的文章. 一.引入 如何调用zxing的代码生成一个二维码呢?主要的函数只有一个,如下所示: B ...

  7. zxing 生成二维码,可设置logo、二维码颜色、白边大小

    主要是使用google的zxing 生成二维码,可设置logo.二维码前景色/后景色.白边大小.二维码大小 1.用到jar包 <dependency><groupId>com. ...

  8. 基于zxing生成二维码

    目录 1.二维码的原理 2.基于zxing生成二维码 3.逻辑及其应用 完整代码:https://github.com/122537067/zxingQRcodeLogoColor 效果图: 1.二维 ...

  9. 使用zxing生成二维码

    使用zxing批量在做好的立牌背景图的指定位置上,把指定的文本内容(链接地址.文本等)生成二维码并放在该位置, 最后加上立牌编号. 步骤: 1).做好背景图,如下图: 扫一扫添加关注 2).生成二维码 ...

最新文章

  1. 他山之石:Github的使用
  2. 静态Web服务器-返回固定页面数据
  3. 这10道springboot常见面试题你需要了解下
  4. 【机器学习】24个终极项目提升您的机器学习知识和技能
  5. python保存至对应目录_python如何实现复制目录到指定目录
  6. P1056 排座椅(模拟)
  7. cf1504. Travelling Salesman Problem
  8. JavaFX 8的弹出式编辑器
  9. 微服务网关总结之 —— zuul
  10. Android系统onKeyDown监控/拦截/监听/屏蔽返回键、菜单键和Home键
  11. 协同办公OA系统 沉淀企业文化
  12. 【比赛】新冠肺炎疫情趋势预测大赛~推荐大家参加下
  13. 转载——如果让我完善几年前的一个项目,我会做哪些改进?
  14. synchronized关键字的4种用法
  15. IntelliJ IDEA 设置主题背景
  16. 【光剑藏书轩2021】《表象与本质:类比,思考之源和思维之火》
  17. LimeSurvey的使用和简单的二次开发
  18. java 获取剪切板文件_如何在Java程序中读写系统剪切板的数据
  19. python xgboost建模过程_机器学习——XGBoost大杀器,XGBoost模型原理,XGBoost参数含义...
  20. mysql存储移动端emoji表情 报错Incorrect string value: '\xF0\x9F\x98\x82'

热门文章

  1. 股利折现模型详解-股票定价-财务管理(七)
  2. CAD网页Web端显示开发为什么要以WebGIS的思路来开发?
  3. matplotlib-04 xlabel设置x轴的标签
  4. word中插入未压缩的原图
  5. java中char数据类型的使用
  6. BGP简介-如何配置 EBGP(外部 BGP)
  7. HDU 1859 最小长方形
  8. 改变word自带公式显示的字体的方法
  9. MVC无法打开项目文件 此安装不支持该项目类型
  10. 005:魔兽世界之一:备战