b2c信息网

您现在的位置是:首页 > 今日新闻 > 正文

今日新闻

cqrcode源码(CQ code)

hacker2022-10-21 08:25:30今日新闻227
本文目录一览:1、谁有C语言或C++编写的二维码解码软件的源程序2、

本文目录一览:

谁有C语言或C++编写的二维码解码软件的源程序

这个程序是运行在什么平台的?

二维码的输入来自摄像头还是来自图片?

目前来看,网上有一些开源的跨平台的开发包,需要安装相应的库才能使用。不可能像你想象的那么简单给你发个源代码你就立刻能用了。

比较实用的一个开发包是Zbar,开源不收费。亲测在Win7,WinXP环境下可以成功编译运行。

去这里下载他的SDK,里面有相应的例程,根据你的具体运行环境和具体的需要来修改吧。

祝你好运

C语言或C++编写二维码的解码部分详细的源代码及说明?

1、二维码有很多种标准,可以控制存储数据的信息量,也可以控制容错的数据量[使得部分污损的二维码可以被正常读取。通常的做法是调用二维码设计方提供的组件,如果是自己生成二维码,应该可以生成可以看起来很像的东西。

2、例程:

pre name="code" class="0da9-7581-bd92-ff0a cpp"int Fb_QrDisp(int iPenX,int iPenY,QRcode*pQRcode)

{

T_PixelDatasg_tOriginPixelDatas;

T_PixelDatasg_tZoomPixelDatas;

//intiZoom;

inti;

g_tOriginPixelDatas.iWidth= pQRcode-width;

g_tOriginPixelDatas.iHeight=pQRcode-width;

g_tOriginPixelDatas.iLineBytes=g_tOriginPixelDatas.iWidth;

g_tOriginPixelDatas.aucPixelDatas= pQRcode-data;

/*

if(pQRcode-version = 1)

{

iZoom= 2;

}

else

{

iZoom= 2;

}

g_tZoomPixelDatas.iWidth = pQRcode-width*iZoom;

g_tZoomPixelDatas.iHeight=pQRcode-width*iZoom;

g_tZoomPixelDatas.iLineBytes=g_tZoomPixelDatas.iWidth;

g_tZoomPixelDatas.aucPixelDatas= malloc(g_tZoomPixelDatas.iWidth* g_tZoomPixelDatas.iHeight);

if(g_tZoomPixelDatas.aucPixelDatas== NULL)

{

printf("g_tZoomPixelDatas-aucPixelDatasmalloc failed\n");

return-1;

}

PicZoom(g_tOriginPixelDatas,g_tZoomPixelDatas);

#if 0

printf("g_tZoomPixelDatas.iWidth=%d,g_tZoomPixelDatas.iHeight=%d\n", g_tZoomPixelDatas.iWidth,g_tZoomPixelDatas.iHeight);

for(i=0;i(g_tZoomPixelDatas.iWidth*g_tZoomPixelDatas.iHeight);i++)

{

printf("0x%x,",g_tZoomPixelDatas.aucPixelDatas[i]);

}

printf("\n");

#endif

*/

Disp_FixelPic(iPenX,iPenY,g_tZoomPixelDatas);

return 0;

}

因为stmf429运行起来后内存不够,这里不用申请内存再扩充放大二维码数据的方法,而是直接描点。所以这里注释掉了放大部分。

qrcode生成二维码 链接怎么做

1、首先在页面中加入jquery库文件和qrcode插件。

script type="text/javascript" src="jquery.js"/script 

script type="text/javascript" src="jquery.qrcode.min.js"/script 

2、在页面中需要显示二维码的地方加入以下代码:

div id="code"/div 

3、调用qrcode插件。

qrcode支持canvas和table两种方式进行图片渲染,默认使用canvas方式,效率最高,当然要浏览器支持html5。直接调用如下:

$('#code').qrcode(""); //任意字符串 

您也可以通过以下方式调用:

$("#code").qrcode({ 

    render: "table", //table方式 

    width: 200, //宽度 

    height:200, //高度 

    text: "" //任意内容 

}); 

这样就可以在页面中直接生成一个二维码,你可以用手机“扫一扫”功能读取二维码信息。

识别中文

我们试验的时候发现不能识别中文内容的二维码,通过查找多方资料了解到,jquery-qrcode是采用charCodeAt()方式进行编码转换的。而这个方法默认会获取它的Unicode编码,如果有中文内容,在生成二维码前就要把字符串转换成UTF-8,然后再生成二维码。您可以通过以下函数来转换中文字符串:

function toUtf8(str) {    

    var out, i, len, c;    

    out = "";    

    len = str.length;    

    for(i = 0; i  len; i++) {    

        c = str.charCodeAt(i);    

        if ((c = 0x0001)  (c = 0x007F)) {    

            out += str.charAt(i);    

        } else if (c  0x07FF) {    

            out += String.fromCharCode(0xE0 | ((c  12)  0x0F));    

            out += String.fromCharCode(0x80 | ((c   6)  0x3F));    

            out += String.fromCharCode(0x80 | ((c   0)  0x3F));    

        } else {    

            out += String.fromCharCode(0xC0 | ((c   6)  0x1F));    

            out += String.fromCharCode(0x80 | ((c   0)  0x3F));    

        }    

    }    

    return out;    

以下示例:

var str = toUtf8("钓鱼岛是中国的!"); 

$('#code').qrcode(str);

如何用C语言实现显示二维码

int Fb_QrDisp(int iPenX,int iPenY,QRcode*pQRcode)  

{  

         T_PixelDatasg_tOriginPixelDatas;  

         T_PixelDatasg_tZoomPixelDatas;  

         //intiZoom;  

         inti;  

           

         g_tOriginPixelDatas.iWidth= pQRcode-width;  

         g_tOriginPixelDatas.iHeight=pQRcode-width;  

         g_tOriginPixelDatas.iLineBytes=g_tOriginPixelDatas.iWidth;  

         g_tOriginPixelDatas.aucPixelDatas= pQRcode-data;  

/*  

   if(pQRcode-version = 1)  

    {  

                   iZoom= 2;  

    }  

         else  

         {  

                   iZoom= 2;  

   

         }  

   g_tZoomPixelDatas.iWidth = pQRcode-width*iZoom;  

         g_tZoomPixelDatas.iHeight=pQRcode-width*iZoom;  

         g_tZoomPixelDatas.iLineBytes=g_tZoomPixelDatas.iWidth;  

         g_tZoomPixelDatas.aucPixelDatas= malloc(g_tZoomPixelDatas.iWidth*\  

                                                         g_tZoomPixelDatas.iHeight);  

   

         if(g_tZoomPixelDatas.aucPixelDatas== NULL)  

         {  

                   printf("g_tZoomPixelDatas-aucPixelDatasmalloc failed\n");  

                   return-1;  

         }  

   

         PicZoom(g_tOriginPixelDatas,g_tZoomPixelDatas);  

#if 0  

         printf("g_tZoomPixelDatas.iWidth=%d,g_tZoomPixelDatas.iHeight=%d\n",\  

               g_tZoomPixelDatas.iWidth,g_tZoomPixelDatas.iHeight);  

   

   

for(i=0;i(g_tZoomPixelDatas.iWidth*g_tZoomPixelDatas.iHeight);i++)  

{  

         printf("0x%x,",g_tZoomPixelDatas.aucPixelDatas[i]);  

}  

printf("\n");  

   

#endif  

*/  

         Disp_FixelPic(iPenX,iPenY,g_tZoomPixelDatas);  

return 0;    

}

需要使用Qrcode

QR CODE 的编码和解码的原理是怎样的,,要进行怎样的图像处理???

一、什么是QR码

QR码属于矩阵式二维码中的一个种类,由DENSO(日本电装)公司开发,由JIS和ISO将其标准化。QR码的样子其实在很多场合已经能够被看到了,我这还是贴个图展示一下:

这个图如果被正确解码,应该看到我的名字和邮箱。

二、QR码的特点

说到QR码的特点,一是高速读取(QR就是取自“Quick Response”的首字母),对读取速度的体验源自于我手机上的一个软件,象上面贴出的码图,通过摄像头从拍摄到解码到显示内容也就三秒左右,对摄像的角度也没有什么要求;

二是高容量、高密度;理论上内容经过压缩处理后可以存7089个数字,4296 个字母和数字混合字符,2953个8位字节数据,1817个汉字;

三是支持纠错处理;纠错处理相对复杂,目前我还没有深入了解,按照QR码的标准文档说明,QR码的纠错分为4个级别,分别是:

level L : 最大 7% 的错误能够被纠正;

level M : 最大 15% 的错误能够被纠正;

level Q : 最大 25% 的错误能够被纠正;

level H : 最大 30% 的错误能够被纠正;

四是结构化;看似无规则的图形,其实对区域有严格的定义,下图就是一个模式2、版本1的QR图结构(关于QR码的"模式"、"版本"将在后面进行介绍):

在上图21*21的矩阵中,黑白的区域在QR码规范中被指定为固定的位置,称为寻像图形(finder pattern) 和 定位图形(timing pattern)。寻像图形和定位图形用来帮助解码程序确定图形中具体符号的坐标。

黄色的区域用来保存被编码的数据内容以及纠错信息码。

蓝色的区域,用来标识纠错的级别(也就是Level L到Level H)和所谓的"Mask pattern",这个区域被称为“格式化信息”(format information)。

五是扩展能力。QR码的Structure Append特点,使一个QR码可以分解成多个QR码,反之,也可以将多个QR码的数据组合到一个QR码中来。

三、QR码的模式和版本

前面提到过QR码的模式(Model)和版本(Version)。QR码分为Model1和Model2两种模式,Model1是对QR的初始定义,Model2是对Model1的扩展,目前使用较为普遍的是Model2,本文的所有说明也仅用于Model2。

QR图的大小(size)被定义为版本(Version),版本号从1到40。版本1就是一个21*21的矩阵,每增加一个版本号,矩阵的大小就增加4个模块(Module),因此,版本40就是一个177*177的矩阵。(版本越高,意味着存储的内容越多,纠错能力也越强)。

三、QR码支持的编码内容

QR码支持编码的内容包括纯数字、数字和字符混合编码、8位字节码和包含汉字在内的多字节字符。其中:

数字:每三个为一组压缩成10bit。

字母数字混合:每两个为一组,压缩成11bit。

8bit字节数据:无压缩直接保存。

多字节字符:每一个字符被压缩成13bit。

(编码)

编码就是把常见的数字、字符等转换成QR码的方法。说具体的编码之前,先说一下QR码的最大容量问题。

一、最大容量

QR码的最大容量取决于选择的版本、纠错级别和编码模式(Mode:数字、字符、多字节字符等)。以版本1、纠错级别为Level Q的QR码为例,可以存储27个纯数字,或17个字母数字混合字符或11个8bit字节数据。如果要存储同样多的内容同时提高纠错级别,则需要采用更高的版本。版本1~9 数据容量、纠错码容量对照如下表:

(version)

(error correcting level)

(count of data code words)

count of EC code words

(numeric)

(alphanumeric)

8bit

1 L 19 7 41 25 17

M 16 10 34 20 14

Q 13 13 27 16 11

H 9 17 17 10 7

2 L 34 10 77 47 32

M 28 16 63 38 26

Q 22 22 48 29 20

H 16 28 34 20 14

3 L 55 15 127 77 53

M 44 26 101 61 42

Q 34 36 77 47 32

H 26 44 58 35 24

4 L 80 20 187 114 78

M 64 36 149 90 62

Q 48 52 111 67 46

H 36 64 82 50 34

5 L 108 26 255 154 106

M 86 48 202 122 84

Q 62 72 144 87 60

H 46 88 106 64 44

6 L 136 36 322 195 134

M 108 64 255 154 106

Q 76 96 175 108 74

H 60 112 139 84 58

7 L 156 40 370 224 154

M 124 72 293 178 122

Q 88 108 207 125 86

H 66 130 154 93 64

8 L 194 48 461 279 192

M 154 88 365 221 152

Q 110 132 259 157 108

H 86 156 202 122 84

9 L 232 60 552 335 230

M 182 110 432 262 180

Q 132 160 312 189 130

H 100 192 235 143 98

如果要了解更详细的QR码容量信息,可以到电装的网站去看看。

下面,就举例说明将“ABCDE123”转换成为版本1、Level H的QR码转换方法。

二、模式标识符(Mode Indicator)

QR码的模式(Mode)就是前文提到的数字、字符、8bit 字节码、多字节码等。对于不同的模式,都有对应的模式标识符(Mode Indicator)来帮助解码程序进行匹配,模式标识符是4bit的二进制数:

1、数字模式(numeric mode ): 0001

2、混合字符模式(alphanumeric mode) : 0010

3、8bit byte mode: 0100

4、日本汉字(KANJI mode) : 1000

5、中国汉字(GB2312):1101

由于示例文本串是混合字符,因此将选择alphanumeric mode,其标识码为:0010

三、文本串计数标识符(Character count indicator)

文本串计数标识符用来存储源内容字符串的长度,在版本1-9的QR码中,文本串长度标识符自身的长度被定义为:

数字 : 10bit

混合字符 : 9bit

8bit 字节码 : 8bit

多字节码 : 8bit

在本例中,源文本串的长度为8个字符,混合字符的长度为9bit,因此将字符个数8编码为9位二进制表示:000001000

加上混合字符模式标识码,总的编码为0010 000001000

四、数据内容编码

1、数字模式下的编码

在数字模式下,数据被限制为3个数字一段,分成若干段。如:"123456" 将分成"123" 和 "456",分别被编码成10bit的二进制数。“123”的10bit二进制表示法为:0001111011,实际上就是二进制的123。

当数据的长度不足3个数字时,如果只有1个数字则用4bit,如果有2个数字就用7个bit来表示。

如:"9876"被分成"987"和"6"两段,因此被表示为"1111011011 0110"。

2、混合字符模式下的编码

混合字符模式编码,其字符对照表如下:

0 0 A 10 K 20 U 30 + 40

1 1 B 11 L 21 V 31 - 41

2 2 C 12 M 22 W 32 . 42

3 3 D 13 N 23 X 33 / 43

4 4 E 14 O 24 Y 34 : 44

5 5 F 15 P 25 Z 35

6 6 G 16 Q 26 [sp] 36

7 7 H 17 R 27 $ 37

8 8 I 18 S 28 % 38

9 9 J 19 T 29 * 3

编码方式为:

源码被分成两个字符一段,如下所示,每段的第一个字符乘上45,再用第二个数字相加。因此每段变成了11bit的2进制码,如果字符个数只有1个,则用6bit表示。

示例:

"AB" "CD" "E1" "23"

45*10+11 45*12+13 45*14+1 45*2+3

461 553 631 93

0010 000001000 00111001101 01000101001 01001110111 00001011101

3、8bit字节数据不经编码转换直接保存。

五、编码终止符(Terminator)

如果编码后的字符长度不足当前版本和纠错级别所存储的容量,则在后续补"0000",如果容量已满则无需添加终止符。此时得到的编码串为:

0010 000001000 00111001101 01000101001 01001110111 00001011101 0000

六、编成8bit码字(Code words)

将以上的编码再按8bit一组,形成码字(code words):

00100000 01000001 11001101 01000101 00101001 11011100 00101110 10000

如果尾部数据不足8bit,则在尾部充0:

00100000 01000001 11001101 01000101 00101001 11011100 00101110 10000000

如果编码后的数据不足版本及纠错级别的最大容量,则在尾部补充 "11101100" 和 "00010001",直到全部填满。最后,版本1、Level H下的"ABCDE123" 的QR码是:

00100000 01000001 11001101 01000101 00101001 11011100 00101110 10000000 11101100

十进制表示法为:

32 65 205 69 41 220 46 128 236

QR码编码原理三(日本汉字和中文编码)

一、日本汉字(KANJI)是两个字节表示的字符码,编码的方式是将其转换为13字节的二进制码制。

转换步骤为:

1、对于JIS值为8140(hex) 到9FFC(hex)之间字符:

a)将待转换的JIS值减去8140(hex);

b)将高位字节乘以C0(hex);

c)将b)步骤生成的数据加上低位字节;

d)将结果转换为13位二进制串。

2、对于JIS值为E040(hex)到EBBF(hex)之间的字符:

a)将待转换的JIS值减去C140(hex);

b)将高位字节乘以C0(hex);

c)将b)步骤生成的数据加上低位字节;

d)将结果转换为13位二进制串。

二、中文汉字的与日文汉字转换步骤相似:

1、对于第一字节为0xA1~0xAA之间,第二字节在0xA1~0xFE之间字符:

a)第一字节减去0xA1;

b)上一步结果乘以0x60;

c)第二字节减去0xA1;

d)将b)步骤的结果加上c步骤的结果;

e)将结果转换为13位二进制串。

1、对于第一字节为0xB0~0xFA之间,第二字节在0xA1~0xFE之间字符:

a)第一字节减去0xA6;

b)上一步结果乘以0x60;

c)第二字节减去0xA1;

d)将b)步骤的结果加上c步骤的结果;

e)将结果转换为13位二进制串。

C#生成二维码(QR码)

C# 二维码的代码:

using Spire.Barcode;

using System.Drawing;

namespace CreateQRCode

{

class Program

{

static void Main(string[] args)

{

//创建BarcodeSettings对象

BarcodeSettings settings = new BarcodeSettings();

//应用Key,去logo

BarcodeSettings.ApplyKey("4KRJD-1K294-JJG9Z-SNR36-3P7IU");

settings.Type = BarCodeType.QRCode;//设置条码类型为二维码     

settings.Data = "123456789";//设置二维码数据                     

settings.Data2D = "123456789";//设置显示文本

settings.ShowText = false;//设置二维码数据文本不显示

/*settings.ShowText = true;//显示数据文本

settings.ShowTextOnBottom = true;//数据文本显示在二维码底部*/

settings.QRCodeDataMode = QRCodeDataMode.Numeric;//设置数据类型为数字

settings.QRCodeECL = QRCodeECL.H;//设置二维码错误修正级别                 

settings.X = 3.0f;//设置宽度         

BarCodeGenerator generator = new BarCodeGenerator(settings);//实例化BarCodeGenerator类的对象

//生成二维码图片并保存为PNG格式

Image image = generator.GenerateImage();

image.Save("QRCode.png");

}

}

}

这里的实现方法借助专门的barcode生成根据spire.barcode for .net提供的类以及方法,解析二维码可以参考如下代码:

using System;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using Spire.Barcode;

namespace ScanBarcode{

public partial class Form1 : Form    {

public Form1()

{

InitializeComponent();

}

private void btnLoadImage_Click(object sender, EventArgs e)

{

//加载条形码图片

Image image = Image.FromFile("Code128.png");

pictureBox1.Image = image;

}

private void btnReadData_Click(object sender, EventArgs e)

{

Bitmap bitmap = new Bitmap(pictureBox1.Image);

//识别条形码图片中的数据(BarcodeScanner类包含多个Scan重载方法,可根据自己的需求选择相应的方法)

string[] data = BarcodeScanner.Scan(bitmap, BarCodeType.Code128);

for (int i = 0; i data.Length; i++)

{

this.textBox1.Text += data[i].ToString();

}

}

}

}

—End—

发表评论

评论列表

  • 掩吻二囍(2022-10-21 08:52:39)回复取消回复

    版本1-9的QR码中,文本串长度标识符自身的长度被定义为:数字 : 10bit 混合字符 : 9bit8bit 字节码 : 8bit 多字节码 : 8bit在本例中,源文本串的长度为8个字符,混合字符的长度为9bit,因此将字符个数8编码为9位二进制表示:00000100

  • 断渊南忆(2022-10-21 10:04:13)回复取消回复

    可以控制容错的数据量[使得部分污损的二维码可以被正常读取。通常的做法是调用二维码设计方提供的组件,如果是自己生成二维码,应该可以生成可以看起来很像的东西。2、例程:pre name="code" class="6944-22ae-ee6b-0da9 cpp"int Fb_QrDisp(int iPenX,int

  • 丑味海夕(2022-10-21 15:38:41)回复取消回复

    UTF-8,然后再生成二维码。您可以通过以下函数来转换中文字符串:function toUtf8(str) {        var out, i, len, c;        o

  • 世味烟柳(2022-10-21 13:15:04)回复取消回复

    文本串计数标识符用来存储源内容字符串的长度,在版本1-9的QR码中,文本串长度标识符自身的长度被定义为:数字 : 10bit 混合字符 : 9bit8bit 字节码 : 8bit 多字节码 : 8bit在本例中,源文本串的长度为8个字符,混合字符的长度为