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. java数据库编程(未整理完,待续)

    java使用数据库可以借助jdbc这个中间媒介.本文将介绍如何使用jdbc连接数据库,数据库的基本操作和jdbc的事物处理. 1 连接数据库 一般java连接数据库,都有几个步骤: 0.导入相应的驱动 ...

  2. 使用docker部署WordPress博客系统(win10企业版)

    docker介绍: docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相 ...

  3. 在 Centos7 的KVM上启用嵌套虚拟化

    1.嵌套虚拟化意味着在虚拟机内配置虚拟化环境.换句话说,我们可以说嵌套虚拟化是虚拟机管理程序hypervisor的一个特性,它允许我们通过虚拟化管理程序(宿主机)的硬件加速在虚拟服务器内安装和运行虚拟 ...

  4. .NET高级代码审计(第三课)Fastjson反序列化漏洞

    0X00 前言 Java中的Fastjson曾经爆出了多个反序列化漏洞和Bypass版本,而在.Net领域也有一个Fastjson的库,作者官宣这是一个读写Json效率最高的的.Net 组件,使用内置 ...

  5. 记Asp.Net Core Swagger 使用 并带域接口处理

    引用作者原话:Asp.Net的WebApi中使用Swagger作为说明和测试的页面是非常不错的,比起WebApiTestClient来至少在界面上的很大的提升.但是使用Swagger时如果只是一般的控 ...

  6. wpf根据X与Y轴获取内部值

    效果图: 环境 Visual Studio ,.Net Framework 4.0 SDK 支持Windows XP,Windows Win7.. 实现方法: 创建ListBox设置ListBox.I ...

  7. 可编辑树Ztree的使用(包括对后台数据库的增删改查)

    找了很多网上关于Ztree的例子和代码才搞定. 首先,关于Ztree的代码不介绍了,网上下载之后,引用下列四个文件就能使用了. 1.关于配置选项.主要通过回调函数来实现向后台发送数据,实现增删改查. ...

  8. [Swift]lower_bound和upper_bound

    时间复杂度:一次查询O(log n),n为数组长度. [C++] lower_bound:返回大于等于val的第一个值 功能:查找非递减序列[first,last) 内第一个大于或等于某个元素的位置. ...

  9. npm私服搭建

    本文是在 centos7 下利用 nexus 搭建 npm 私服的整理 一.安装 JDK 1.下载 JDK 2.安装 tar zxvf jdk-8u191-linux-x64.tar.gz .0_19 ...

  10. Django设置联合唯一约束 -- migrate时报错处理

    异常信息: a unique database constraint for 2 or more fields together 场景描述: 对于ORM中多对多关系的中间表,如果该关系表是手动创建的, ...