精华内容
下载资源
问答
  • 二维码编码和显示设计说明: 这是基于战舰STM32写的二维码编码和显示。TFT是2.8寸的液晶,由于像素点的限制,我的矩阵只有57X57,二维码的编码程序是网上找的。抱着试试的心理,移植成功了,代码里面做了一点处理,...
  • 再将讲这个工具类之前,我先给小白补充一点条形码和二维码(以下基础知识选自,我本科阶段的一本教材:《物联网导论》(刘云浩 编著)。有对物联网感兴趣的,可以看看这本书),我们要内外兼修,你说是不是这么个理呢...

      有一个好的工具,会让你的开发事半功倍。再将讲这个工具类之前,我先给小白补充一点条形码和二维码(以下基础知识选自,我本科阶段的一本教材:《物联网导论》(刘云浩 编著)。有对物联网感兴趣的,可以看看这本书),我们要内外兼修,你说是不是这么个理呢!

      多行组成的条形码,不需要连接一个数据库,本身可存储大量数据,应用于:医院、驾驶证、物料管理、货物运输,当条形码受一定破坏时,错误纠正能使条形码能正确解码。二维码,是一个多行、连续

    性、可变长、包含大量数据的符号标识。每个条形码有3 - 90行,每一行有一个起始部分、数据部分、终止部分。它的字符集包括所有128个字符,最大数据含量是1850个字符。

      一维条形码只是在一个方向(一般是水平方向)表达信息,而在垂直方向则不表达任何信息,其一定的高度通常是为了便于阅读器的对准。

      一维条形码的应用可以提高信息录入的速度,减少差错率,但是一维条形码也存在一些不足之处:

        数据容量较小: 30个字符左右

        只能包含字母和数字

        条形码尺寸相对较大(空间利用率较低)

        条形码遭到损坏后便不能阅读

      在水平和垂直方向的二维空间存储信息的条形码, 称为二维条形码(dimensional bar code)

      优势

      从以上的介绍可以看出,与二维条形码相比一维条形码有着明显的优势,归纳起来主要有以下几个方面:

        (一)数据容量更大

        (二)超越了字母数字的限制

        (三)条形码相对尺寸小

        (四)具有抗损毁能力

      优点

      1.高密度编码,信息容量大:

        可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍。

      2.编码范围广:

        该条码可以把图片、声音、文字、签字、指纹等可以数字化的信息进行编码,用条码表示出来;可以表示多种语言文字;可表示图像数据。

      3.容错能力强,具有纠错功能:

        这使得二维条码因穿孔、污损等引起局部损坏时,照样可以正确得到识读,损毁面积达50%仍可恢复信息。

      4.译码可靠性高:

        它比普通条码译码错误率百万分之二要低得多,误码率不超过千万分之一。

      5.可引入加密措施:

        保密性、防伪性好。

      6.成本低,易制作,持久耐用。

      7.条码符号形状、尺寸大小比例可变。

      8.二维条码可以使用激光或CCD阅读器识读。

     

      看到这里,接下来,我给大家讲解一下封装的条形码和二维码编码解码类。

      1 import java.awt.image.BufferedImage;
      2 import java.io.File;
      3 import java.util.Hashtable;
      4 
      5 import javax.imageio.ImageIO;
      6 
      7 import com.google.zxing.BarcodeFormat;
      8 import com.google.zxing.BinaryBitmap;
      9 import com.google.zxing.DecodeHintType;
     10 import com.google.zxing.EncodeHintType;
     11 import com.google.zxing.LuminanceSource;
     12 import com.google.zxing.MultiFormatReader;
     13 import com.google.zxing.MultiFormatWriter;
     14 import com.google.zxing.Result;
     15 import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
     16 import com.google.zxing.client.j2se.MatrixToImageWriter;
     17 import com.google.zxing.common.BitMatrix;
     18 import com.google.zxing.common.HybridBinarizer;
     19 import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
     20 
     21 /**
     22  * 条形码和二维码编码解码
     23  */
     24 public class ZxingHandler {
     25 
     26     /**
     27      * 条形码编码
     28      * 
     29      * @param contents
     30      * @param width
     31      * @param height
     32      * @param imgPath
     33      */
     34     public static void encode(String contents, int width, int height, String imgPath) {
     35         int codeWidth = 3 + // start guard
     36                 (7 * 6) + // left bars
     37                 5 + // middle guard
     38                 (7 * 6) + // right bars
     39                 3; // end guard
     40         codeWidth = Math.max(codeWidth, width);
     41         try {
     42             BitMatrix bitMatrix = new MultiFormatWriter().encode(contents,
     43                     BarcodeFormat.EAN_13, codeWidth, height, null);
     44 
     45             MatrixToImageWriter
     46                     .writeToFile(bitMatrix, "png", new File(imgPath));
     47 
     48         } catch (Exception e) {
     49             e.printStackTrace();
     50         }
     51     }
     52 
     53     /**
     54      * 条形码解码
     55      * 
     56      * @param imgPath
     57      * @return String
     58      */
     59     public static String decode(String imgPath) {
     60         BufferedImage image = null;
     61         Result result = null;
     62         try {
     63             image = ImageIO.read(new File(imgPath));
     64             if (image == null) {
     65                 System.out.println("the decode image may be not exit.");
     66             }
     67             LuminanceSource source = new BufferedImageLuminanceSource(image);
     68             BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
     69 
     70             result = new MultiFormatReader().decode(bitmap, null);
     71             return result.getText();
     72         } catch (Exception e) {
     73             e.printStackTrace();
     74         }
     75         return null;
     76     }
     77     
     78     /**
     79      * 二维码编码
     80      * 
     81      * @param contents
     82      * @param width
     83      * @param height
     84      * @param imgPath
     85      */
     86     public static void encode2(String contents, int width, int height, String imgPath) {
     87         Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
     88         // 指定纠错等级
     89         hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
     90         // 指定编码格式
     91         hints.put(EncodeHintType.CHARACTER_SET, "GBK");
     92         try {
     93             BitMatrix bitMatrix = new MultiFormatWriter().encode(contents,
     94                     BarcodeFormat.QR_CODE, width, height, hints);
     95 
     96             MatrixToImageWriter
     97                     .writeToFile(bitMatrix, "png", new File(imgPath));
     98 
     99         } catch (Exception e) {
    100             e.printStackTrace();
    101         }
    102     }
    103 
    104     /**
    105      * 二维码解码
    106      * 
    107      * @param imgPath
    108      * @return String
    109      */
    110     public static String decode2(String imgPath) {
    111         BufferedImage image = null;
    112         Result result = null;
    113         try {
    114             image = ImageIO.read(new File(imgPath));
    115             if (image == null) {
    116                 System.out.println("the decode image may be not exit.");
    117             }
    118             LuminanceSource source = new BufferedImageLuminanceSource(image);
    119             BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
    120 
    121             Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
    122             hints.put(DecodeHintType.CHARACTER_SET, "GBK");
    123 
    124             result = new MultiFormatReader().decode(bitmap, hints);
    125             return result.getText();
    126         } catch (Exception e) {
    127             e.printStackTrace();
    128         }
    129         return null;
    130     }
    131 
    132     /**
    133      * @param args
    134      */
    135     public static void main(String[] args) {
    136 
    137         // 条形码
    138         String imgPath = "target\\zxing_EAN13.png";
    139         String contents = "6923450657713";
    140         int width = 105, height = 50;
    141         
    142         ZxingHandler.encode(contents, width, height, imgPath);
    143         System.out.println("finished zxing EAN-13 encode.");
    144 
    145         String decodeContent = ZxingHandler.decode(imgPath);
    146         System.out.println("解码内容如下:" + decodeContent);
    147         System.out.println("finished zxing EAN-13 decode.");
    148         
    149         // 二维码
    150         String imgPath2 = "target\\zxing.png";
    151         String contents2 = "Hello Gem, welcome to Zxing!"
    152                 + "\nBlog [ http://jeeplus.iteye.com ]"
    153                 + "\nEMail [ jeeplus@163.com ]";
    154         int width2 = 300, height2 = 300;
    155 
    156         ZxingHandler.encode2(contents2, width2, height2, imgPath2);
    157         System.out.println("finished zxing encode.");
    158 
    159         String decodeContent2 = ZxingHandler.decode2(imgPath2);
    160         System.out.println("解码内容如下:" + decodeContent2);
    161         System.out.println("finished zxing decode.");
    162         
    163     }
    164     
    165 }

     

     

    转载请注明出处!

    http://www.cnblogs.com/libingbin/

    感谢您的阅读。如果文章对您有用,那么请轻轻点个赞,以资鼓励。

     

    转载于:https://www.cnblogs.com/libingbin/p/6032973.html

    展开全文
  • 小程序生成二维码400 错误

    千次阅读 2018-09-26 15:08:57
    小程序生成二维码400 错误 小程序生成二维码官方文档其实很简单,就在这里,我在这里使用的是接口B:适用于需要的码数量几多的业务场景,其中的参数如下图所示: 在这里,写接口可能会报400错误,也就是说参数...

    小程序生成二维码官方文档其实很简单,就在这里,我在这里使用的是接口B:适用于需要的码数量几多的业务场景,其中的参数如下图所示:
    官方参数

    在这里,写接口可能会报400错误,也就是说参数无效,这里的参数主要是图片中的第一个参数scene,一定要注意:

    最大32可见字符,只支持数字,大小写英文及部分特殊字符:!#$&’()*+,/:;=?@-._~,其他字符请自行编码为合法字符,(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)

    长度32,只支持部分字符!

    展开全文
  • 初识二维码 第六讲 二维码的质量控制的...在二维码中,对格式信息和版本信息以及数据码都进行了纠错编码使用的是BCH编码算法。 在译码时,进行纠错检查,发现错误,及时纠错。 对数据码的纠错的编码算法叫做Reed-Solom

    初识二维码 第六讲 二维码的质量控制的被动措施


    我在第一讲中,提到过,二维码的扫码,是一个信息传输的过程,这个过程中,噪声是不可避免的。
    传输的数据出错是大概率的。当解出来的码,发现了错误,怎么办呢?这就是质量的被动措施来解决了。
    一个是冗余,例如格式信息和版本信息在二维码上都存储有两份完全一样的信息。
    另一个是纠错码的使用。
    在二维码中,对格式信息和版本信息以及数据码都进行了纠错编码使用的是BCH编码算法。
    在译码时,进行纠错检查,发现错误,及时纠错。
    对数据码的纠错的编码算法叫做Reed-Solomon。
    BCH与Reed-Solomon在编码时使用的是多项式的除法算法。除法的硬件实现如下图的除法电路图所示。

    展开全文
  • 如何在QR二维码中插入图片

    千次阅读 2014-02-19 19:02:25
    我之前做了一个使用google开源项目zxing实现二维码、一维码编码解码的程序并开放了源码(用C#实现的条形码和二维码编码解码器),今天继续在此程序基础上,实现二维码中间加小图片。 背景知识 QRcode使用里德-所罗门...

    二维码终于火了,现在大街小巷大小商品广告上的二维码标签都随处可见,而且大都不是简单的纯二维码,而是中间有个性图标的二维码。

    我之前做了一个使用google开源项目zxing实现二维码、一维码编码解码的程序并开放了源码(用C#实现的条形码和二维码编码解码器),今天继续在此程序基础上,实现二维码中间加小图片。

    背景知识

    QRcode使用里德-所罗门码来进行错误修正。对于我们来说,里德-所罗门编码有两个非常重要的特性。第一,它是一种显式系统码,也就是说,你可以在最终的编码中直接看到原有的信息。就好比我们对”hello world”进行编码,最终看到的是”hello world”以及其后面跟随的几个容错码。第二点,里德-所罗门编码是可以被”异或”的,将两个不同里德-所罗门编码得到的结果异或运算后会得到一个新的里德-所罗门码,并且这个新码的原码即是原来两个原码的异或。如果你想知道为什么这两个特性会成立,请看Finite Field Arithmetic and Reed-Solomon Coding.

    QRcode

    一副QRcode图像会定义一些独特的描述符来帮助人们或者电脑识别出自己是一张QRcode。这种描述符随着QRcode的大小不同而略有区别——越大的QRcode图像拥有越多的描述符。但是对于人的识别来说,特征最明显的还是图片的四个角的符号是固定的,看到这样的四个角人类就本能的反应:这是一个QRcode。

    (实际上,我们可以通过读取图像最左上角的两个象素点来判断编码的冗余程度。定义黑色为0,白色为1,那么如果看到00则是L级别的冗余,01是M,10是Q,11则是最高的H级别冗余。

    有了上面的这些工作,我们可以非常容易的知道原码信息在图像中的位置。然后通过改变自己的原码信息,就可以改变图像中的像素以至于可以在里面作图了。虽说如此,下面的一些情形可以让事情变得更有趣。

     

    我做的二维码插入图片:

    之前我给大家免费提供了使用zxing开源项目改造而成的一二维码编码解码器,但未能插入图片。这次经过一番努力,成功将图片插入二维码,并能编码和解码。插入图片的关键在于二维码容错系数的调整,源码中有详尽描述。

    界面:

     

    要在二维码中插入图片且可以正常解码,主要注意以下两点即可:

    1.设置二维码的容错系数要高;

    在Zxing项目中,二维码生成的时候是可以设置容错系数的:

    EncodeHintType.ERROR_CORRECTION设置成ErrorCorrectionLevel.H

                     //构造二维码写码器
                    MultiFormatWriter mutiWriter = new com.google.zxing.MultiFormatWriter();
                    Hashtable hint=new Hashtable();
                    hint.Add(EncodeHintType.CHARACTER_SET,"UTF-8");
                    hint.Add(EncodeHintType.ERROR_CORRECTION,com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.H);
                    //生成二维码
                    ByteMatrix bm = mutiWriter.encode(txtMsg.Text, com.google.zxing.BarcodeFormat.QR_CODE, 300, 300,hint);
                    Bitmap img = bm.ToBitmap();

     

     

    2.中间插入的图片大小和位置要合适;


    中间图片如果太大,遮住了二维码的大部分面积,那肯定不行,如果太小,就起不到个性化的效果。

    那么多大合适呢,根据前文中描述的QR码的特点,其三个带方块的角上是数据区,不能覆盖,只有中间和右下角这片区域可以覆盖,但也不宜过大。

    经测试,中间小图片尺寸占二维码总宽度的2/7比较合适,既满足了图片的清晰度,又不影响二维码的加密数据。

    小图片最好居中放置,而且形状可以不规则。

    展开全文
  • c# 二维码 QRCode 支持中文 源码 以下是部分代码: //获取请求字符串 string QRstring = context.Request.... //设置编码错误纠正 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; ......
  • 我之前做了一个使用google开源项目zxing实现二维码、一维码编码解码的程序并开放了源码(用C#实现的条形码和二维码编码解码器),今天继续在此程序基础上,实现二维码中间加小图片。 背景知识 QRcode使用里德-所罗门...
  • 常用二维码QR码详细资料,实用。QR码符号的要求。它规定了QR码模式2符号的特征,数据字符编码,符号格式,尺寸特征,错误纠正纠错规则,参考译码算法,符号质量要求。
  • QR 二维码纠错码(三)

    千次阅读 2019-09-25 12:29:07
    纠错码可以帮助 QR 读码器检测 QR 二维码中的错误并予以校正。继对文本数据编码后,本篇将继续介绍生成纠错码的过程。 第一步:必要时将数据码拆分成块 在生成错误校正码之前,如果 QR 二维码大于版本 2,有必要将...
  • 开源免费的二维码批量生成工具,可以按自己需要的规则批量生成二维码,比如数字自增二维码、随机生成二维码、...错误校正损坏,也解码的二维码,电平L(低) 7%的码字可以被恢复,M级(中) 的码字的15%可以被恢复...
  • php生成二维码

    2015-07-08 20:19:08
    //choe为编码,默认为utf-8 //数据大于2K请用post进行发送 /* chld错误处理 L:默认,允许恢复7%的数据丢失 M:允许15% Q:允许25% H:允许30% */ 实现方法一:get方式 $width = 300; $height = 300; ...
  • Atitit java 二维码识别 图片识别 ... 错误修正容量L水平7%的字码可被修正M水平15%的字码可被修正Q水平25%的字码可被修正H水平30%的字码可被修正31.7. QR是怎么对数据码加上纠错码的?31.8. 画二维码...
  • php生成二维码的几种方式

    千次阅读 2013-08-06 09:52:50
    php生成二维码的几种方式,...//api参数简要说明 //choe为编码,默认为utf-8 //数据大于2K请用post进行发送 /* chld错误处理 L:默认,允许恢复7%的数据丢失 M:允许15% Q:允许25% H:允许30% */ $urlToEnco
  • Halcon的二维码解码步骤和解码技巧 一、二维码简介 1 . 类型多样,常见的有QR Code二维码、 Data Matrix二维码等。...4.译码可靠性高:它比普通条码译码错误率百万分之二要低得多,误码率不超过千万分之一。...
  • 网上下载的源代码 好像是vs2008 写的,我下载以后转为vs2012 了,并且修复了其中的一些中文乱码的编码bug 下载后再vs2012 下...注意:原版的这个代码是有编码错误的哦!!我这个都已经修改好了,下载就可以使用啦!!
  • 开源免费的二维码批量生成工具,可以按自己需要的规则批量生成二维码,比如数字自增二维码、随机生成...错误校正损坏,也解码的二维码,电平L(低) 7%的码字可以被恢复,M级(中) 的码字的15%可以被恢复,级Q(...
  • java生成和解析二维码demo源码

    千次下载 热门讨论 2015-03-30 11:08:00
    二维码的特点: 1.高密度编码,信息容量大:可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍。 2.编码范围广:该条码可以把图片、声音、文字、签字、指纹等可以...
  • // 设置偏移量,不设置可能导致二维码生产错误(解析失败出错) int pixoff = 2; // 二维码输出 if (contentBytes.length > 0 && contentBytes.length ) { boolean[][] code = qrcode.calQrcode...
  • QR二维码生成模块1.4,修正矢量格式、字符画等错误QR编码 └生成 └取宽度 └取高度 └取位图数据 └画图 └擦除 └取位图句柄 └保存 └是否生成 └是否画图 └复制 └取文本 └取编码 └取纠错级别...
  • 数字图像处理之二维码图像提取算法(二)

    万次阅读 多人点赞 2014-11-06 13:27:59
    二维码标准: 国外:pdf417,Datamatrix,QR 国内:龙贝,汉信。   图像输入-> 图像预处理-> 二维码图像切割(定位)-> 二维码图像校正-> 译码 ...译码:二维码码字提取-> 纠错译码-> ... 判断编码模式和字

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 149
精华内容 59
关键字:

二维码编码错误