1.下载ThoughtWorks.QRCode引用并添加在工程中
2.在实现类QRCodeEncoderDemo中引入Dll,添加方法

using System;

using System.Collections.Generic;

using System.Drawing;

using System.Drawing.Drawing2D;

using System.Linq;

using System.Web;

using ThoughtWorks.QRCode;

using ThoughtWorks.QRCode.Codec;

namespace WebApplication3

{

    public class QRCodeEncoderDemo

    {

        /// <summary>  

        /// 生成二维码.  

        /// </summary>  

        /// <param name="data">需要添加进去的文本</param>  

        /// <returns></returns>  

        public System.Drawing.Image GCode(String data)

        {

           QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();

            qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;

            qrCodeEncoder.QRCodeScale = 5;

            qrCodeEncoder.QRCodeVersion = 7;

            qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;

            var pbImg = qrCodeEncoder.Encode(data, System.Text.Encoding.UTF8);

            var width = pbImg.Width / 10;

            var dwidth = width * 2;

            Bitmap bmp = new Bitmap(pbImg.Width + dwidth, pbImg.Height + dwidth);

            Graphics g = Graphics.FromImage(bmp);

            var c = System.Drawing.Color.White;

            g.FillRectangle(new SolidBrush(c), 0, 0, pbImg.Width + dwidth, pbImg.Height + dwidth);

            g.DrawImage(pbImg, width, width);

            g.Dispose();

            return bmp;

        }

        /// <summary>  

        /// 调用此函数后使此两种图片合并,类似相册,有个  

        /// 背景图,中间贴自己的目标图片  

        /// </summary>  

        /// <param name="sourceImg">粘贴的源图片</param>  

        /// <param name="destImg">粘贴的目标图片</param>  

        public static System.Drawing.Image CombinImage(System.Drawing.Image imgBack, string destImg)

        {

            System.Drawing.Image img = System.Drawing.Image.FromFile(destImg);        //照片图片    

            if (img.Height != 50 || img.Width != 50)

            {

                img = KiResizeImage(img, 60, 60, 0);

            }

            Graphics g = Graphics.FromImage(imgBack);

            //g.DrawImage(imgBack, 0, 0, 相框宽, 相框高); 

            g.DrawImage(imgBack, 0, 0, imgBack.Width, imgBack.Height);        

            //g.FillRectangle(System.Drawing.Brushes.White, imgBack.Width / 2 - img.Width / 2 - 1, imgBack.Width / 2 - img.Width / 2 - 1,1,1);

            //相片四周刷一层黑色边框  

            //g.DrawImage(img, 照片与相框的左边距, 照片与相框的上边距, 照片宽, 照片高);  

            g.DrawImage(img, imgBack.Width / 2 - img.Width / 2, imgBack.Width / 2 - img.Width / 2, img.Width, img.Height);

            GC.Collect();

            return imgBack;

        }

        /// <summary>  

        /// Resize图片  

        /// </summary>  

        /// <param name="bmp">原始Bitmap</param>  

        /// <param name="newW">新的宽度</param>  

        /// <param name="newH">新的高度</param>  

        /// <param name="Mode">保留着,暂时未用</param>  

        /// <returns>处理以后的图片</returns>  

        public static System.Drawing.Image KiResizeImage(System.Drawing.Image bmp, int newW, int newH, int Mode)

        {

            try

            {

                System.Drawing.Image b = new Bitmap(newW, newH);

                Graphics g = Graphics.FromImage(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;

            }

        }

    }

}

3.生成二维码(psb.jpg可自选,此处默认)

        protected void BtnCreate_Click(object sender, EventArgs e)

        {         

            QRCodeEncoderDemo qrc = new QRCodeEncoderDemo();

            //生成二维码图片

            System.Drawing.Image ImageBack=qrc.GCode(this.txtstr.Text.ToString());

            string DestImg = Server.MapPath(@"~/Image/psb.jpg");

            System.Drawing.Image Img = QRCodeEncoderDemo.CombinImage(ImageBack, DestImg);

            string filename = DateTime.Now.ToString("yyyyMMddhhmmss") + ".jpg";

            Img.Save(Server.MapPath(@"~/Image/") + filename);

            this.Img.ImageUrl = "~/Image/" + filename;

        }

4.解析二维码

protected void Button1_Click(object sender, EventArgs e)

        {

            QRCodeDecoder decoder = new QRCodeDecoder();

           Bitmap bt = new Bitmap(Server.MapPath(@"~/Image/"+this.Img.ImageUrl.Substring(this.Img.ImageUrl.LastIndexOf('/'))));

            string decodedString = decoder.decode(new QRCodeBitmapImage(bt),Encoding.UTF8);

            this.TxtContent.Text = decodedString;

        }

C#生成带Logo二维码的更多相关文章

  1. QRCode 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式

    目录 功能介绍 常见问题 效果图与示例 apk Gradle 依赖 布局文件 自定义属性说明 接口说明 关于我 功能介绍 根据之前公司的产品需求,参考 barcodescanner 改的,希望能帮助到 ...

  2. thinkphp使用phpqrcode生成带logo二维码

    //二维码图片保存路径 $pathname = date("Ymd",time()); $pathname = "./Qrcode/" . $pathname; ...

  3. Java生成带logo二维码

    目前生成二维码的方式有很多种,本例采用谷歌的zxing,去白边,添加logo等处理均在代码中有注释 demo连接 https://github.com/littlechaser/qrcode.git

  4. 微信公众号开发C#系列-11、生成带参数二维码应用场景

    1.概述 我们在微信公众号开发C#系列-7.消息管理-接收事件推送章节有对扫描带参数二维码事件的处理做了讲解.本篇主要讲解通过微信公众号开发平台提供的接口生成带参数的二维码及应用场景. 微信公众号平台 ...

  5. ZXing生成条形码、二维码、带logo二维码

    采用的是开源的ZXing,Maven配置如下,jar包下载地址,自己选择版本下载,顺便推荐下Maven Repository <!-- https://mvnrepository.com/art ...

  6. phpqrcode 分别生成普通、带logo、带背景带logo二维码

    前提:下载好 phpqrcode 类库 1.生成普通二维码 //引入类库 include('phpqrcode/phpqrcode.php'); //二维码里面的链接地址 $url="htt ...

  7. vue生成条形码/二维码/带logo二维码

    条形码:https://blog.csdn.net/dakache11/article/details/83749410 //安装 cnpm install @xkeshi/vue-barcode / ...

  8. php生成带参数二维码

    1.PHPqrCode是一个PHP二维码生成类库,利用它可以轻松生成二维码,官网提供了下载和多个演示demo, https://sourceforge.net/projects/phpqrcode/ ...

  9. zxing解析带logo二维码会报com.google.zxing.NotFoundException

    参考原文:https://blog.csdn.net/cyl1226541/article/details/70557232 //复杂模式,开启PURE_BARCODE模式(☆☆☆) HINTS.pu ...

随机推荐

  1. cxgrid显示海量数据

    cxgrid显示海量数据 在默认情况下,cxgrid显示几万条以上的数据会很慢.怎么办? 交下面的属性设为TRUE以后,速度飞快. 但速度是快了,自动计算列的合计值这些功能却失效了,正所谓有得必有失!

  2. 关于synchronized和lock 的使用及其在线程间的通信

    题目要求:子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次 synchronized的使用 import java.util.conc ...

  3. WebApi使用JWT认证

    https://www.cnblogs.com/wangyulong/p/8727683.html https://blog.csdn.net/kebi007/article/details/7286 ...

  4. [LintCode] Permutations II

    Given a collection of numbers that might contain duplicates, return all possible unique permutations ...

  5. 实验4 IIC通讯与EEPROM接口

    1.       用C语言编程,利用定时器产生一个0~99秒变化的秒表,并且显示在数码管上,每过一秒将这个变化写入实验板上AT24C02,当关闭实验板电源,并再次打开实验板电源时,单片机从AT24C0 ...

  6. 未能加载文件或程序集“System.Web.Http.WebHost, Version=4.0.0.0, ”或它的某一个依赖项。系统找不到指定的文件。

    第一次发布MVC项目,打开网站 未能加载文件或程序集“System.Web.Http.WebHost, Version=4.0.0.0, ”或它的某一个依赖项.系统找不到指定的文件. 问题原因:缺少配 ...

  7. Android开发教程 - 使用Data Binding(二)集成与配置

    本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...

  8. vue.js - 1

    最近开发公司vue前端项目,做一下笔记,偶尔上来查漏补缺 Vue指令之v-bind的三种用法 直接使用指令v-bind 使用简化指令: 在绑定的时候,拼接绑定内容::title="btnTi ...

  9. BZOJ 5281--[Usaco2018 Open]Talent Show(分数规划&单调队列&DP)

    5281: [Usaco2018 Open]Talent Show Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 79  Solved: 58[Sub ...

  10. 11_python_闭包迭代器

    一.函数名(第一类对象) 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量. def func(): print("呵呵") print(func) 结果: & ...