二维码生成及读取方法

二维码的制作主要是引用第三方的程序集ThoughtWorks.QRCode.dll,调用QRCodeEncoder的Encode方法得到一个Bitmap图;相反,解析二维码就是用的Decode方法。

如下示例生成二维码的方法:

/// <summary>
        /// 生成不带logo的二维码图片
        /// </summary>
        /// <param name="data">要生成二维码的字符串</param>
        /// <returns></returns>
        public System.Drawing.Image GCode(String data)
        {
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
            String encoding = cboEncoding.Text;//QRCodeEncodeMode是枚举类型,此处是使用ComboBox给用户自行选择
            if (encoding == "Byte")
            {
                qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
            }
            else if (encoding == "AlphaNumeric")
            {
                qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.ALPHA_NUMERIC;
            }
            else if (encoding == "Numeric")
            {
                qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.NUMERIC;
            }
            try
            {
                int scale = Convert.ToInt16(txtSize.Text);
                qrCodeEncoder.QRCodeScale = scale;//二维码尺寸大小
            }
            catch (Exception)
            {
                MessageBox.Show("Invalid size!");
                return null;
            }
            try
            {
                int version = Convert.ToInt16(cboVersion.Text);
                qrCodeEncoder.QRCodeVersion = version;//版本
            }
            catch (Exception)
            {
                MessageBox.Show("Invalid version !");
            }

            string errorCorrect = cboCorrectionLevel.Text;
            if (errorCorrect == "L")
                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
            else if (errorCorrect == "M")
                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
            else if (errorCorrect == "Q")
                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q;
            else if (errorCorrect == "H")
                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;

            Image pbImg = qrCodeEncoder.Encode(data);
            return pbImg;
        }

如果要生成一个中间带一个小图片的二维码,则需要使用GDI+将图片画到已经生成的二维码图片上(注意,中间小图片的大小要控制好,否则可能会遮挡二维码有效信息,导致读不出来,):

 /// <summary>
        /// 生成带logo二维码的图片
        /// </summary>
        /// <param name="imgBack">背景图片</param>
        /// <param name="destImg">logo图片</param>
        /// <returns></returns>
        public static System.Drawing.Image CombinImage(System.Drawing.Image imgBack, string destImg)
        {
            if (imgBack == null)//如果二维码生成出错
            {
                return null;
            }
            try
            {
                System.Drawing.Image img = System.Drawing.Image.FromFile(destImg);//拿到logo图片
                if (img.Height != 50 || img.Width != 50)
                {
                    img = KiResizeImage(img, 50, 50);//调整logo图片大小
                }
                Graphics g = Graphics.FromImage(imgBack);
                g.DrawImage(img, imgBack.Width / 2 - img.Width / 2, imgBack.Height / 2 - img.Height / 2, img.Width, img.Height);//把logo画到二维码上
                GC.Collect();
                return imgBack;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Logo image error!");//如果选择的Logo图片未获取到,则抛出异常
                return null;
            }
        }

        /// <summary>
        /// 调整logo图片的大小
        /// </summary>
        /// <param name="bmp">logo图片</param>
        /// <param name="newW">宽</param>
        /// <param name="newH">高</param>
        /// <returns>返回处理好的图片</returns>
        public static System.Drawing.Image KiResizeImage(System.Drawing.Image bmp, int newW, int newH)
        {
            try
            {
                System.Drawing.Image b = new Bitmap(newW, newH);//创建一个空白图片
                Graphics g = Graphics.FromImage(b);//把b图片当做背景创建画布
                g.InterpolationMode = InterpolationMode.HighQualityBicubic; // 插值算法的质量

                g.DrawImage(bmp, new Rectangle(0, 0, newW, newH), new Rectangle(0, 0, bmp.Width, bmp.Height), GraphicsUnit.Pixel);//把图片按比例画到画布上
                g.Dispose();
                return b;
            }
            catch
            {
                return null;
            }

        }

好了,对于二维码的制作和解析,以上内容对于使用者基本够用了,如果感兴趣的话,可以使用Reflector反编译查看ThoughtWorks.QRCode.dll内部到底是如何实现的

二维码生成及读取方法

时间: 2024-11-29 05:28:20

二维码生成及读取方法的相关文章

二维码生成. 文字生成图片. 多张图片合并方法及临时合成图片并下载

package com.easyrail.eam.controller; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.font.FontRenderContext; import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle

微信支付支付宝支付生成二维码的方法(php生成二维码的三种方法)

如果图简单,可以用在线生成 http://pan.baidu.com/share/qrcode?w=150&h=150&url=http://www.xinzhenkj.com 最简单最实例的goolge开源方法 1.google开放api 代码如下: [php] view plain copy <span style="font-size:14px;">$urlToEncode="http://www.helloweba.com"; g

java实现二维码生成的几个方法

1: 使用SwetakeQRCode在Java项目中生成二维码 http://swetake.com/qr/ 下载地址 或着http://sourceforge.jp/projects/qrcode/downloads/28391/qrcode.zip 这个是日本人写的,生成的是我们常见的方形的二维码 可以用中文 如:5677777ghjjjjj 2: 使用BarCode4j生成条形码和二维码 BarCode4j网址:http://sourceforge.net/projects/barcode

使用PHP生成二维码的两种方法(带logo图像)

一.利用Google API生成二维码 Google提供了较为完善的二维码生成接口,调用API接口很简单,以下是调用代码: $urlToEncode="http://www.jb51.net"; generateQRfromGoogle($urlToEncode); /** * google api 二维码生成[QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式] * @param string $chl 二维码包含的信息,可以是数字.字符.二进制信息

二维码生成方法

从网上到处找代码东拼西凑出来的一个二维码生成方法,支持给二维码上面贴图标. 需要通过Nuget引用QRCode.Net 先贴个调用的Demo吧,直接从项目中拷过来的,看意思就好. public string GetUserQRCode(Web_User user) { var url = VirtualPaths.HostAddress + "/Member/MemberSpaceAddFriend?name=" + user.Name; string userHeadphoto =

php生成二维码的两种方法(转)

生成二维码程序在网上可以找到很多我们发现像google,还有一些国外站都提供了免费生成二维码的插件或api了,下面我来给大家介绍几种. 最简单最实例的goolge开源方法 1.google开放api 代码如下: $urlToEncode="http://gz.altmi.com";   generateQRfromGoogle($urlToEncode);   function generateQRfromGoogle($chl,$widhtHeight ='150',$EC_leve

PHP生成带logo图像二维码的两种方法

本文主要和大家分享PHP生成带logo图像二维码的两种方法,主要以文字和代码的形式和大家分享,希望能帮助到大家. 一.利用Google API生成二维码Google提供了较为完善的二维码生成接口,调用API接口很简单,以下是调用代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 $urlToEncode="http://www.php.cn"; generateQRfromGoogle($urlToEncode); /**

二维码生成类

import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.imageio.ImageIO; import com.google.zxing.BarcodeFormat; import com.google.z

Android 开发中使用到二维码生成和解析

二维码生成 二维码解析 在项目的开发中, 使用二维码作为数据传递 交换 已经是常态了! 在这我也讲讲自己在项目开发中使用到的二维码. 生成二维码的开发流程 1 应用google 给我们提供的zxing.jar (建议官网下载) 2 使用zxing.jar 的MultiFormatWriter 类 生成一张二维码图片 核心代码块 /** * 方法说明:生成无图片二维码 */ @SuppressWarnings("unused") private Bitmap createTwoCode(