精华内容
下载资源
问答
  • java 代码生成二维码

    2018-01-12 15:20:53
    使用java代码生成二维码使用java代码生成二维码使用java代码生成二维码使用java代码生成二维码使用java代码生成二维码使用java代码生成二维码使用java代码生成二维码
  • vb纯代码生成二维码源代码,支持低中高容错生成 vb纯代码生成二维码源代码,支持低中高容错生成 vb纯代码生成二维码源代码,支持低中高容错生成 vb纯代码生成二维码源代码,支持低中高容错生成
  • JAVA代码生成二维码

    2018-12-27 22:48:27
    JAVA代码生成二维码功能,可根据输入的信息生成对应二维码,从前端输入到后台生成所有代码都有,保证实现二维码生成功能!
  • C#代码生成二维码

    2017-08-20 10:19:29
    通过C#代码生成二维码,应用于C#开发使用到二维码的场景
  • 代码生成二维码(自动更新自动打印)
  • 大神写的用原生代码生成二维码。 喜欢研究的朋友下载。 不用原生代码生成的demo我之前有发过那个还有条形码的生成 都可以使用
  • 如何用C代码生成二维码

    万次阅读 2016-10-16 20:48:00
    如何用C代码生成二维码 如何用C代码生成二维码  当下因微信和支付宝等手机应用广泛使用,而基于二维码/一维条码的移动支付,也借助手机移动端席卷全国,使得越来越多的人知道有“二维码”这么一种...

    如何用C代码生成二维码

    如何用C代码生成二维码

      当下因微信和支付宝等手机应用广泛使用,而基于二维码/一维条码的移动支付,也借助手机移动端席卷全国,使得越来越多的人知道有“二维码”这么一种东西。

      对于普通用户而来,一般只知道将自己的二维码展示给别人,别人使用软件识别这个二维码即可完成一定的功能。比如,扫码二维码付款、扫码二维码加微信好友、扫码二维码访问网页、扫码二维码下载app等等。这些个功能,在日常行为中,已经很常见了,但作为程序猿的我们,我们怎么能不知道二维码是如何生成的呢?或者说,我要自己生成一个二维码,除了去网页上找二维码生成工具来生成,我可以自己编码来实现么?

       答案,当然是,必须可以。不然这文章不用写了。

       在介绍如何用代码生成二维码之前,就不得不先介绍一个开源库叫zint。这个开源可谓牛叉的很,几乎平时见过的“码”,各式各样的一维条码、各式各样的二维码条码都难不倒它,重要的是,它还是开源的,几乎包含了所有常见“码”的生成。以下是摘自官方用户使用手册的介绍片段。(笔者上一篇博文介绍zint的安装时简单介绍了一下zint库,http://www.cnblogs.com/Recan/p/5967378.html ,它的开源项目网页为https://sourceforge.net/projects/zint/

    The Zint project aims to provide a complete cross-platform open source barcode generating solution. The package currently consists of a Qt based GUI, a command line executable and a library with an API to allow developers access to the capabilities of Zint. It is hoped that Zint provides a solution which is flexible enough for professional users while at the same time takes care of as much of the processing as possible to allow easy translation from input data to barcode image.

    -----------------------------------------------------华丽丽的分割线-----------------------------------------------------

      言归正传,说回如何使用zint库生成二维码。主要使用到以下几个函数:可以从zint.h中得到api的声明(主要是C语言的接口)。

    ZINT_EXTERN struct zint_symbol* ZBarcode_Create(void);

    ZINT_EXTERN void ZBarcode_Clear(struct zint_symbol *symbol);

    ZINT_EXTERN void ZBarcode_Delete(struct zint_symbol *symbol);

    ZINT_EXTERN int ZBarcode_Encode_and_Print(struct zint_symbol *symbol, unsigned char *input, int length, int rotate_angle);

      以下是个人封装的生成二维码的自定义接口函数:

    /****************************************************************************

    Descpribe: Create Qrcode API with C Code by calling zint lib.

    Input    : pQrCodeData, the qrcode data buf

                          QrcodeLen, the len of qrcode data, but it can be 0

                          pQrCodeFile, the output file name of qrcode, it can be NULL              

    Output   : pZintRet, to store the ret code from linzint.

    Return   : 0 is ok, and other values are fail. See the meanings in enum ZINT_RET_CODE

    Notes    : pQrCodeFile, Must end in .png, .eps or .svg. when isn,t NULL string.

    ****************************************************************************/

    ZINT_RET_CODE Zint_Create_QrCode(uint8_t *pQrCodeData, int QrcodeLen, char *pQrCodeFile, int *pZintRet);

      这个接口定义比较简单,上面也简单说了各个参数的意义,其他中特别需要注意的是,如果传入生成二维码图片名字不使用默认值时(pQrCodeFile != NULL),也务必保证pQrCodeFile必须是以.png, .eps or .svg.结尾的文件名。

      以下是zint_code.c 和 zint_code.h的内容,里面将zint中生成二维码的几个函数封装在一块了,使用者只需关注上面定义的Zint_Create_QrCode函数,即可生成漂亮的二维码图片文件。

     1 /****************************************************************************
     2  * File       : zint_code.c
     3  * 
     4  * Copyright (c) 2011 by Li.Recan < 721317716@qq.com >
     5  * 
     6  * DESCRIPTION: Demo for creating qrcode by C code.
     7  * 
     8  * Modification history
     9  * --------------------------------------------------------------------------
    10  * Date         Version  Author       History
    11  * --------------------------------------------------------------------------
    12  * 2016-10-15   1.0.0    Li.Recan     written
    13  ***************************************************************************/
    14  
    15 // Standard Library
    16 #include <string.h>
    17 #include <stdio.h>
    18 
    19 // so Library
    20 #include "zint.h"
    21 
    22 // Project Header
    23 #include "zint_code.h"
    24 
    25 
    26 /****************************************************************************
    27 Descpribe: Create Qrcode API with C Code by calling zint lib.
    28 Input    : pQrCodeData, the qrcode data buf
    29            QrcodeLen, the len of qrcode data, but it can be 0
    30            pQrCodeFile, the output file name of qrcode, it can be NULL           
    31 Output   : pZintRet, to store the ret code from linzint. 
    32 Return   : 0 is ok, and other values are fail. See the meanings in enum ZINT_RET_CODE
    33 Notes    : pQrCodeFile, Must end in .png, .eps or .svg. when isn,t NULL string.
    34 ****************************************************************************/
    35 ZINT_RET_CODE Zint_Create_QrCode(uint8_t *pQrCodeData, int QrcodeLen, char *pQrCodeFile, int *pZintRet)
    36 {
    37     struct zint_symbol *pMySymbol     = NULL;
    38     int RetCode                     = 0;    
    39     
    40     if(!pQrCodeData) //check input pointer
    41     {
    42         return ZINT_ERR_INV_DATA;
    43     }
    44 
    45     if(QrcodeLen == 0)
    46     {
    47         QrcodeLen = strlen((char *)pQrCodeData);
    48     }
    49     if(QrcodeLen > QRCODE_MAX_LEN)//len is too long
    50     {        
    51         return ZINT_ERR_TOO_LONG;
    52     }
    53 
    54     if(0 == ZBarcode_ValidID(BARCODE_QRCODE))
    55     {
    56         return ZINT_ERR_INV_CODE_ID;
    57     }
    58     
    59     pMySymbol = ZBarcode_Create();
    60     if(pMySymbol == NULL)
    61     {
    62         return ZINT_ERR_MEMORY;
    63     }
    64 
    65     if(pQrCodeFile)//when it's NULL, outfile will be "out.png"
    66     {
    67         if(strstr(pQrCodeFile, "png") || (strstr(pQrCodeFile, "eps")) || (strstr(pQrCodeFile, "svg")))
    68         {
    69             strcpy(pMySymbol->outfile, pQrCodeFile);
    70         }
    71         else
    72         {
    73             ZBarcode_Clear(pMySymbol);
    74             ZBarcode_Delete(pMySymbol); //release memory in zint lib
    75             return ZINT_ERR_FILE_NAME;
    76         }
    77     }
    78     pMySymbol->symbology     = BARCODE_QRCODE;  
    79     pMySymbol->option_1     = 3; //ECC Level.It can be large when ECC Level is larger.(value:1-4)  
    80     pMySymbol->scale         = 4; //contorl qrcode file size, default is 1, used to be 4   
    81     pMySymbol->border_width = 2; //set white space width around your qrcode and 0 is for nothing 
    82     
    83     RetCode = ZBarcode_Encode_and_Print(pMySymbol, pQrCodeData, QrcodeLen, 0);    
    84     ZBarcode_Clear(pMySymbol);
    85     ZBarcode_Delete(pMySymbol); //release memory in zint lib
    86 
    87     if(pZintRet)
    88     {
    89         *pZintRet = RetCode; //save ret code from zint lib
    90     }
    91     
    92     return ((0 == RetCode) ? (ZINT_OK) : (ZINT_ERR_LIB_RET));
    93 }
    View Code: zint_code.c
     1 /****************************************************************************
     2  * File       : zint_code.h
     3  * 
     4  * Copyright (c) 2011 by Li.Recan < 721317716@qq.com >
     5  * 
     6  * DESCRIPTION: API for creating qrcode by C code.
     7  * 
     8  * Modification history
     9  * --------------------------------------------------------------------------
    10  * Date         Version  Author       History
    11  * --------------------------------------------------------------------------
    12  * 2016-10-15   1.0.0    Li.Recan     written
    13  ***************************************************************************/
    14  
    15 #ifndef __ZINT_CODE__
    16 #define __ZINT_CODE__
    17 
    18 #ifdef __cplusplus
    19 extern "C"
    20 {
    21 #endif
    22 
    23 #include <stdint.h>
    24 
    25 #define QRCODE_MAX_LEN        500 //max string len for creating qrcode
    26 
    27 typedef enum 
    28 {
    29     ZINT_OK                 = 0,
    30     ZINT_ERR_INV_DATA         = -1, //input invalid data
    31     ZINT_ERR_TOO_LONG         = -2, //len for input data is too long    
    32     ZINT_ERR_INV_CODE_ID     = -3,//the code type is not supported by zint
    33     ZINT_ERR_MEMORY         = -4, //malloc memory error in zint lib
    34     ZINT_ERR_FILE_NAME        = -5, //qrcode file isn'y end in .png, .eps or .svg.
    35     ZINT_ERR_LIB_RET         = -6, //zint lib ret error, real ret code should be zint api ret code
    36 }ZINT_RET_CODE;
    37 
    38 /****************************************************************************
    39 Descpribe: Create Qrcode API with C Code by calling zint lib.
    40 Input    : pQrCodeData, the qrcode data buf
    41            QrcodeLen, the len of qrcode data, but it can be 0
    42            pQrCodeFile, the output file name of qrcode, it can be NULL           
    43 Output   : pZintRet, to store the ret code from linzint. 
    44 Return   : 0 is ok, and other values are fail. See the meanings in enum ZINT_RET_CODE
    45 Notes    : pQrCodeFile, Must end in .png, .eps or .svg. when isn,t NULL string.
    46 ****************************************************************************/
    47 ZINT_RET_CODE Zint_Create_QrCode(uint8_t *pQrCodeData, int QrcodeLen, char *pQrCodeFile, int *pZintRet);
    48 
    49 #define Debuging(fmt, arg...)       printf("[%20s, %4d] "fmt, __FILE__, __LINE__, ##arg)
    50 
    51 #ifdef __cplusplus
    52 }
    53 #endif
    54 
    55 #endif /* __ZINT_CODE__ */
    View Code: zint_code.h

      在工程实践中,只需要将这两个文件添加到工程中,并让他们参与工程编译,即可完美使用zint生成二维码了。

      下面是一个简单的demo,将会展示如何使用这个接口函数,见qrcode_test.c

     1 /****************************************************************************
     2  * File       : qrcode_test.c
     3  * 
     4  * Copyright (c) 2011 by Li.Recan < 721317716@qq.com >
     5  * 
     6  * DESCRIPTION: Demo for creating qrcode by C code.
     7  * 
     8  * Modification history
     9  * --------------------------------------------------------------------------
    10  * Date         Version  Author       History
    11  * --------------------------------------------------------------------------
    12  * 2016-10-15   1.0.0    Li.Recan     written
    13  ***************************************************************************/
    14  
    15 // Standard Library
    16 #include <stdio.h>
    17 
    18 // Project Header
    19 #include "zint_code.h"
    20 
    21 int main(int argc, char *argv[])
    22 {
    23     int ZintLibRet             = 0; //ret code from zint lib
    24     ZINT_RET_CODE ZintRet     = 0; //ret code from zint_code api
    25     char QrcodeData[]         = "I love zint lib. 测试一下gbk编码 ...";
    26     char QrcodeDataDef[]     = "This's default qrcode file name : out.png ";
    27     char QrcodeFile[]         = "MyQrcode.png"; // Must end in .png, .eps or .svg. //zint lib ask !
    28     
    29     //test with inputing qrcode_file name
    30     ZintRet = Zint_Create_QrCode((uint8_t*)QrcodeData, 0, QrcodeFile, &ZintLibRet);
    31     if(ZINT_OK != ZintRet)
    32     {
    33         Debuging("Create qrcode err, ZintRet = %d, ZintLibRet = %d\n", ZintRet, ZintLibRet);
    34     }
    35     else
    36     {
    37         Debuging("Create qrcode OK ! View qrcode file : %s in cur path. ZintRet = %d, ZintLibRet = %d\n", QrcodeFile, ZintRet, ZintLibRet);
    38     }
    39     
    40     //test without inputing qrcode_file name
    41     ZintRet = Zint_Create_QrCode((uint8_t*)QrcodeDataDef, 0, NULL, &ZintLibRet);
    42     if(ZINT_OK != ZintRet)
    43     {
    44         Debuging("Create qrcode err, ZintRet = %d, ZintLibRet = %d\n", ZintRet, ZintLibRet);
    45     }
    46     else
    47     {
    48         Debuging("Create qrcode OK ! View qrcode file : out.png in cur path. ZintRet = %d, ZintLibRet = %d\n", ZintRet, ZintLibRet);
    49     }
    50     
    51     return 0;
    52 }
    View Code: qrcode_test.c

      输入完成后,使用gcc -o qrcode_test qrcode_test.c zint_code.c –lzint 即可编译出qrcode_test的bin文件了。

      等等,如果你的linux还未安装zint库,sorry,你将看到

       

      那么赶紧回到上一篇博文 http://www.cnblogs.com/Recan/p/5967378.html 把zint安装起来吧。

      准确无误的编译,之后,在当前目录ls就可以看到qrcode_test的bin文件了。

      我们使用./ qrcode_test运行我们编译出来的demo程序,可以看到以下的提示:

    [liluchang@localhost src]$ ./qrcode_test

    ./qrcode_test: error while loading shared libraries: libzint.so.2.4: cannot

    open shared object file: No such file or directory

    又出什么问题了,原来系统在运行这个demo程序时,没有找到libzint.so来链接,那么我们只需要在运行之前告诉系统去哪里找这个so即可。使用

    export LD_LIBRARY_PATH=/usr/local/lib 这个路径是根据情况而定的。【注意这个export只对当前运行的shell生效,一旦切换一个shell,则需要重新输入。如果需要固定告诉运行demo的时候去哪里找so链接,则可以在编译的时候告诉它。这个点往后再介绍。】

    之后再运行demo程序:

     

    第一个框框里面是demo程序打印出来的调试信息,标识连个二维码都生成成功了。

    第二个框框可以看到,在当前目录下,就已经生成了这两个png文件,并且第二个生成的使用的是系统默认的名字out.png。

    为了验证程序生成的二维码是否正确,我们可以使用手机去扫码一下这两个二维码:

      

    为了验证程序生成的二维码是否正确,我们可以使用手机去扫码一下这两个二维码:

    用手机扫描出来的结果如下:

         

    图中显示的扫描结果,正好如demo中写的

     

    证明这代码是可行的。

     

    好了,本篇介绍使用C语言调用zint库生成二维码的教程就介绍到这里。感兴趣的童鞋可以评论留言或者自行阅读zint用户手册或开源项目介绍网页详细内容。

     

    后话,下篇文章将介绍zint库一维条码的生成,敬请期待。届时,zint_code.c的接口又丰富一些了。

     

    posted @ 2016-10-16 20:48 Mr.Recan 阅读( ...) 评论( ...) 编辑 收藏
    展开全文
  • java代码生成二维码所需要的三个jar包
  • Java代码生成二维码

    2018-11-04 19:54:45
    java生成二维码,适用与爬虫学习者,使用import com.swetake.util.Qrcode; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File;...生成二维码
  • 本资源使用两种方式生成二维码,一种不带logo,另一种带logo;项目里面已经添加了qrcode等二维码辅助包,不用再下载!直接通过集成工具运行即可
  • Delphi代码生成二维码

    2012-11-14 14:31:23
    不错的生成二维码的Delphi代码想自己生成二维码的可以下载试试
  • 生产企业或者物流快递需要用到大量的二维码和条形码,但是要自行编写代码批量生成二维码或者条形码并不容易,涉及的知识面很广。 Excel插件《E灵》提供了二维码接口和条形码接口,您只需要一句代码调用接口就可以...

    生产企业或者物流快递需要用到大量的二维码和条形码,但是要自行编写代码批量生成二维码或者条形码并不容易,涉及的知识面很广。
    Excel插件《E灵》提供了二维码接口和条形码接口,您只需要一句代码调用接口就可以生成二维码,一句代码调用条形码接口就可以生成条形码。配合循环语句就可以批量生二维码或者条形码了。具体操作如下:

    一:下载并安装插件 E灵,下载地址

    单击下载软件

    二:双击安装,安装成功以后打开Excel可以看到“E灵”选项卡

    E灵操作界面

    三:利用VBA调用二维码接口生成二维码

    调用E灵的二维码接口语法如下:
    Application.COMAddIns.Item("Eling").Object.ma "二维码内容",高度(单位:厘米) , 单元格, 边距(单位:磅)

    参数说明
    1.过程名称 Ma,完整书写方式是:Application.COMAddIns.Item("Eling").Object.ma
    2.它有四个参数,第一参数是生成二维码的值,文本格式,例如“中华人民共和国”或者Range(“a1”).value
    3.第二参数是二维码的存放位置,用单元格表示,例如Range(“b2”).
    4.第三参数是二维码的高度,以厘米为单位
    5.第四参数是二维码的边距,值为是0时表示靠边,值为2表示上边距为2(单位是磅)。

    代码举例
    1.用"20190325-24" 生成3厘米高的二维码,放在C3单元格中

    Sub 生成单个二维码()
      Application.COMAddIns.Item("Eling").Object.ma "20190325-24", 3, Range("c3"), 2
    End Sub
    

    2.用订单号码、型体名称、单位和数量批量生成二码

    Sub 批量生成二维码()
      Dim cell As Range, RowItem As Integer, Mysrt As String, Eling As Object
      Set Eling = Application.COMAddIns.Item("Eling").Object
      Application.ScreenUpdating = False
      With Range("a2:d10") '根据自己的情况修改范围
        For RowItem = 1 To .Rows.Count
          Mysrt = ""
          For Each cell In .Rows(RowItem).Cells
           If Len(cell.Value) > 0 Then Mysrt = Mysrt & "," & cell.Value
          Next cell
          Eling.ma Mid(Mysrt, 2, 999), 1.5, Cells(RowItem + 1, "E"), 2
        Next RowItem
        Application.ScreenUpdating = True
        MsgBox "生成完毕,一共" & .Rows.Count & "个二维码", vbOKOnly, "提示"
      End With
    End Sub
    

    3.用订单号码、型体名称、单位和数量批量生成二维码

    Sub 批量生成含标题的二维码()
      Dim cell As Range, RowItem As Integer, ColCount As Byte, Mysrt As String, Eling As Object
      Set Eling = Application.COMAddIns.Item("Eling").Object
      Application.ScreenUpdating = False
      With Range("a2:d10") '根据自己的情况修改范围
        For RowItem = 1 To .Rows.Count
          Mysrt = "": ColCount = 0
          For Each cell In .Rows(RowItem).Cells
            ColCount = ColCount + 1
            Mysrt = Mysrt & vbCrLf & Cells(1, ColCount) & ":" & cell.Value
          Next cell
          Eling.ma Mid(Mysrt, 3, 999), 1.5, Cells(RowItem + 1, "E"), 2
        Next RowItem
        Application.ScreenUpdating = True
        MsgBox "生成完毕,一共" & .Rows.Count & "个二维码", vbOKOnly, "提示"
      End With
    End Sub
    

    演示一下
    在这里插入图片描述

    四:用VBA生成条形码教学

    调用E灵的二维码接口语法如下:

    TXM("条形码内容", "编码", 高度, 单元格对象, "字体", 字号, 加宽倍数)
    

    参数说明
    1.过程名称 Ma,完整书写方式是:Application.COMAddIns.Item("Eling").Object.ma
    2.第一参数是条形码的内容,不能含有中文
    3.第二参数是条形码的编码,可选值是"Code128A",“Code128B"和"Code128C”,其中Code128C生成的图片更窄,但它不支持字母,只支持数值。
    4.第三参数是高度,单位为磅,通常在40-60之间,不宜过高或者过低。
    5.第四参数是单元格对象,条形码需要放在哪个单元格,就用哪个单元格对象
    6.第五参数是字体名称,可以是"宋体"、“黑体”、“Impact”、"Arial"等等
    7.第六参数是字号,即条形码下方的字符大小,通常用10即可,不宜太大。
    8.第七参数是加宽倍数,0表示不加宽,1表示加宽一倍,不支持小数
    9.请尽量用10号字体,否则可能不居中。
    代码举例
    1.用“3265798487”生成Code128C类型的高度为50磅的条形码,存放在A1单元格中。条形码的字符采用10号宋体字。

    Sub 生成单个条形码()
      Application.COMAddIns.Item("Eling").Object.tiaoma "3265798487", "Code128C", 50, Range("a1"), "黑体", 10, 0
    End Sub
    

    2.用B2:B7区域的值和成条形码,存放在D2:D7区域中:

    Sub 批量生成()
     Dim cell As Excel.Range '声明变量
     With Application.COMAddIns.Item("Eling").Object '调用E灵插件接口
      For Each cell In Range("b2:b7") '遍历b2:b7区域的每一个单元格
       '调用工具TiaoMa来生成条形码,插入条形码时会自动调整单元格的高度
       .tiaoma cell.Value, "Code128B", 50, cell.Offset(0, 2), "黑体", 10, 0
     Next
     End With
    End Sub
    

    演示一下
    利用VBA批量生成条形码

    展开全文
  • java代码生成二维码

    2017-11-12 20:18:16
    里面包含一个java类和一个要依赖的包,我是用代码直接用,里面有注释
  • 完整的纯代码二维码生成代码,不需要加载相关的动态库或插件
  • Java代码生成二维码图片

    万次阅读 热门讨论 2014-11-05 14:07:31
    * 生成二维码(QRCode)图片 * @param content 存储内容 * @param imgPath 图片路径 */ public void encoderQRCode(String content, String imgPath) { this.encoderQRCode(content, imgPath, "png", 7); } ...


    需要使用到的jar包:QRCode.jar 下边是一个链接如果链接失效请百度下载。

    这里提供一个下载: 点此下载QRCode.jar 

    package com.lc.test;
    import java.awt.Color;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    import javax.imageio.ImageIO;
    
    import jp.sourceforge.qrcode.QRCodeDecoder;
    import jp.sourceforge.qrcode.exception.DecodingFailedException;
    
    import com.swetake.util.Qrcode;
    
    
    public class TwoDimensionCode {
         
          /**
          * 生成二维码(QRCode)图片
          * @param content 存储内容
          * @param imgPath 图片路径
          */
          public void encoderQRCode(String content, String imgPath)  {
                this.encoderQRCode(content, imgPath, "png", 7);
         }
         
          /**
          * 生成二维码(QRCode)图片
          * @param content 存储内容
          * @param output 输出流
          */
          public void encoderQRCode(String content, OutputStream output) {
                this.encoderQRCode(content, output, "png", 7);
         }
         
          /**
          * 生成二维码(QRCode)图片
          * @param content 存储内容
          * @param imgPath 图片路径
          * @param imgType 图片类型
          */
          public void encoderQRCode(String content, String imgPath,  String imgType) {
                this.encoderQRCode(content, imgPath, imgType, 7);
         }
         
          /**
          * 生成二维码(QRCode)图片
          * @param content 存储内容
          * @param output 输出流
          * @param imgType 图片类型
          */
          public void encoderQRCode(String content, OutputStream output, String imgType) {
                this.encoderQRCode(content, output, imgType, 7);
         }
    
          /**
          * 生成二维码(QRCode)图片
          * @param content 存储内容
          * @param imgPath 图片路径
          * @param imgType 图片类型
          * @param size 二维码尺寸
          */
          public void encoderQRCode(String content, String imgPath,  String imgType, int size) {
                try {
                    BufferedImage bufImg =this.qRCodeCommon(content, imgType, size);
                    
                    File imgFile = new File(imgPath);
                     // 生成二维码QRCode图片
                    ImageIO. write(bufImg, imgType , imgFile);
               } catch (Exception e) {
                    e.printStackTrace();
               }
         }
    
          /**
          * 生成二维码(QRCode)图片
          * @param content 存储内容
          * @param output 输出流
          * @param imgType 图片类型
          * @param size 二维码尺寸
          */
          public void encoderQRCode(String content, OutputStream output, String imgType, int size) {
                try {
                    BufferedImage bufImg =this.qRCodeCommon(content, imgType, size);
                     // 生成二维码QRCode图片
                    ImageIO. write(bufImg, imgType, output);
               } catch (Exception e) {
                    e.printStackTrace();
               }
         }
         
          /**
          * 生成二维码(QRCode)图片的公共方法
          * @param content 存储内容
          * @param imgType 图片类型
          * @param size 二维码尺寸
          * @return
          */
          private BufferedImage qRCodeCommon(String content, String  imgType, int size) {
               BufferedImage bufImg = null;
                try {
                    Qrcode qrcodeHandler = new Qrcode();
                     // 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小
                    qrcodeHandler.setQrcodeErrorCorrect( 'M');
                    qrcodeHandler.setQrcodeEncodeMode( 'B');
                     // 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大
                    qrcodeHandler.setQrcodeVersion(size);
                     // 获得内容的字节数组,设置编码格式
                     byte[] contentBytes = content.getBytes( "utf-8");
                     // 图片尺寸
                     int imgSize = 67 + 12 * (size - 1);
                    bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB );
                    Graphics2D gs = bufImg.createGraphics();
                     // 设置背景颜色
                    gs.setBackground(Color. WHITE);
                    gs.clearRect(0, 0, imgSize, imgSize);
    
                     // 设定图像颜色> BLACK
                    gs.setColor(Color. BLACK);
                     // 设置偏移量,不设置可能导致解析出错
                     int pixoff = 2;
                     // 输出内容> 二维码
                     if (contentBytes. length > 0 && contentBytes.length < 800) {
                          boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
                          for ( int i = 0; i < codeOut. length; i++) {
                                for ( int j = 0; j < codeOut. length; j++) {
                                     if (codeOut[j][i]) {
                                         gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
                                    }
                               }
                         }
                    } else {
                          throw new Exception( "QRCode content bytes  length = " + contentBytes. length + " not in [0, 800].");
                    }
                    gs.dispose();
                    bufImg.flush();
               } catch (Exception e) {
                    e.printStackTrace();
               }
                return bufImg;
         }
         
          /**
          * 解析二维码(QRCode)
          * @param imgPath 图片路径
          * @return
          */
          public String decoderQRCode(String imgPath) {
                // QRCode 二维码图片的文件
               File imageFile = new File(imgPath);
               BufferedImage bufImg = null;
               String content = null;
                try {
                    bufImg = ImageIO.read(imageFile);
                    QRCodeDecoder decoder = new QRCodeDecoder();
                    content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "utf-8" );
               } catch (IOException e) {
                    System. out.println( "Error: " + e.getMessage());
                    e.printStackTrace();
               } catch (DecodingFailedException dfe) {
                    System. out.println( "Error: " + dfe.getMessage());
                    dfe.printStackTrace();
               }
                return content;
         }
         
          /**
          * 解析二维码(QRCode)
          * @param input 输入流
          * @return
          */
          public String decoderQRCode(InputStream input) {
               BufferedImage bufImg = null;
               String content = null;
                try {
                    bufImg = ImageIO. read(input);
                    QRCodeDecoder decoder = new QRCodeDecoder();
                    content = new String(decoder.decode( new TwoDimensionCodeImage(bufImg)), "utf-8" );
               } catch (IOException e) {
                    System. out.println( "Error: " + e.getMessage());
                    e.printStackTrace();
               } catch (DecodingFailedException dfe) {
                    System. out.println( "Error: " + dfe.getMessage());
                    dfe.printStackTrace();
               }
                return content;
         }
    
          public static void main(String[] args) {
               String imgPath = "G:/ZTFCard.png";
               String encoderContent = "我的名片" + "\n我的微博:[http://blog.csdn.net/xlgen157387]" + "\n电子邮件:[1573876303@qq.com]" +"\n手机:[1808462274]" ;
               TwoDimensionCode handler = new TwoDimensionCode();
               handler.encoderQRCode(encoderContent, imgPath, "png" );
    //         try {
    //              OutputStream output = new FileOutputStream(imgPath);
    //              handler.encoderQRCode(content, output);
    //         } catch (Exception e) {
    //              e.printStackTrace();
    //         }
               System. out.println( "========encoder success" );
               
               
               String decoderContent = handler.decoderQRCode(imgPath);
               System. out.println( "解析结果如下:" );
               System. out.println(decoderContent);
               System. out.println( "========decoder success!!!" );
         }
    }

    package com.lc.test;
    
    import java.awt.image.BufferedImage;
    
    import jp.sourceforge.qrcode.data.QRCodeImage;
    
    public class TwoDimensionCodeImage implements QRCodeImage {
    
    	BufferedImage bufImg;
    
    	public TwoDimensionCodeImage(BufferedImage bufImg) {
    		this.bufImg = bufImg;
    	}
    
    	public int getHeight() {
    		return bufImg.getHeight();
    	}
    
    	public int getPixel(int x, int y) {
    		return bufImg.getRGB(x, y);
    	}
    
    	public int getWidth() {
    		return bufImg.getWidth();
    	}
    }


    下面是一个测试的类:QRtest.java

    public class QRtest {
        public static void main(String[] args){
            TwoDimensionCode td = new TwoDimensionCode();
            td.encoderQRCode("这是一个测试文件类","d://123.jpg","jpg",12);
        }
    }


    (注意:有的朋友可能在使用代码的时候,无法导入javax.imageio.ImageIO这个包,请参考这个:点击打开链接
     

    解决方案是:Project---Properties,选择Java Build Path,选中右侧的Libraries,选择Add Library如下图,选中JRE System Library 选择next,进入下一界面选择Execution environment,点击Enviroments按钮选择你采用的JDK如JavaSE-1.6等,不要选下面的OSGi,最后单击完成即可。




    结果如下:


    OK!



    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,994
精华内容 23,197
关键字:

代码生成二维码