android二维码 艺术生成器

[复制链接]
来自: MrlLee 分类: Android精品源码 上传时间: 2016-5-20 17:26:01
Tag:android 二维码 生成器 艺术

项目介绍:

先看图




说明
说明一点微信二维码识别和ZXING,ZBAR都不同

测试发现  
微信中 定位区 的 点 有60%(大概)以上是被填充的 就能 识别为二维码 (方点,圆点,液化点都可识别)
ZXing中更具规格不同 有不一样 信息量较小的二维码 和微信一样(方点,圆点,液化点都可识别)
信息量较大的 由于出现的校正点 导致(方点,液化点可识别,圆点不可识别)
图像组成的二维码定位区中要选择合适的图像才行(试了好久才试出来的),Zxing不用想了 基本都不可识别
zbar:未测试
关键代码:
确定个信息块的位置
[Java] 查看源文件 复制代码
/**
 * 获取二维码位置信息
 *
 * @param matrix
 * @param rect 带回二维码边界
 * @return 返回单个信息点的宽
 */
private static int checkParam(BitMatrix matrix, Rect rect) {
    int width = matrix.getWidth();
    int height = matrix.getHeight();

    int startX = 0;
    int startY = 0;

    for (int y = 0; y < height; y++) {
        for (int x = 0; x < width; x++) {
            if (matrix.get(x, y)) {
                startX = x;
                startY = y;
                x = width;
                y = height;
            }
        }
    }
    int endX = 0;
    for (int x = width - 1; x >= 0; x--) {
        if (matrix.get(x, startY)) {
            endX = x;
            x = -1;
        }
    }
    int endY = 0;
    for (int y = height - 1; y >= 0; y--) {
        if (matrix.get(startX, y)) {
            endY = y;
            y = -1;
        }
    }
    int cellWidth = 1;
    while (true) {
        int pX = startX + cellWidth;
        int pY = startY + cellWidth;
        if (pX <= endX && pY <= endY && matrix.get(pX, pY)) {
            cellWidth++;
            continue;
        }
        break;
    }
    rect.left = startX;
    rect.top = startY;
    rect.right = endX;
    rect.bottom = endY;
    return cellWidth;
}
上面的代码通过遍历 BitMatrix(也可以使用图片的像素点,可以直接用一个生成好的二维码来生成新的艺术二维码) 找到第一个true值点 (如果用像素点,就是找到第一个带色点),该点的坐标就是起始坐标,找到同行最后一个true值点,该点的x就是 结束点的x,找到同列最后一个true值点,该点的y就是 结束点的y;
从起始点开始,延对角线找,找到第一个false值点,该点到起始点的单一方向上的距离 就是 一个信息点的宽。
定位区的宽=7个信息点的宽=7*cellWidth;
通过定位区的宽可以避免修改到它们 或者 对它们使用不同的修改方式
通过信息点的宽 用来 找到每个信息点 并替换它们
液化二维码原理
判断某个信息点的周围点的情况,在对应角上加上圆弧;

某一信息点的左上没有信息点且同时左边和上面同时也没有信息点,说明该点左上角位凸角,要切出圆角;
某一信息点的AB角没有信息点且同时A面和B面同时也没有信息点,说明该点AB角位凸角,要切出圆角;
某一空白点的左边和上面同时具有信息点,说明该点左上角位凹角,要填充圆角;
某一空白点的A面和B面同时具有信息点,说明该点AB角位凹角,要填充圆角;

相关源码推荐:

我来说两句
所有评论(29)
androiderss 2016-5-21 09:12:12
这个好溜啊 顶一下
回复
766601186 2016-5-21 10:16:30
楼主用心了,内容非常精彩。
回复
6547343 2016-5-21 12:30:52
精华内容,楼主V5!
回复
a824210678 2016-5-23 10:39:26
强烈支持楼主ing……
回复
a824210678 2016-5-23 12:43:40
强烈支持楼主ing……
回复
深圳水舰娘 2016-5-23 17:45:36
感觉厉害的不行啊
回复
anoperA 2016-5-23 19:39:02
正需要啊,感谢楼主无私分享!
回复
1234下一页
提取码:  下载次数:19 状态:已购或VIP 售价:10(原价:10)金钱 下载权限:初级码农 
2702 1 19
代码贡献英雄榜
用户名 下载数
联系我们
首页/微信公众账号投稿
帖子代码编辑/版权问题
QQ:435399051,1294855032
如何获得代码达人称号?
如何成为签约作者?
领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )