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. centos7 修改默认启动级别

    systemctl set-default multi-user.target      设定默认为字符界面,也就是3 systemctl set-default graphical.target  ...

  2. mysql数据导入导出方法总结

    MySQL数据备份还原方式总结: 一.将数据导入到指定的数据库 第一种导入方式: (linux下和Windows 下语法是一样的,只是路径的书写方式不同而已) 1.创建一个空数据库 2.进入MySQL ...

  3. windows下安装ubuntu

    在学习linux的过程中,ubuntu无疑是初学者的最佳选择. 下面来列举给Windows系统安装ubuntu双系统的三种方法. 一.虚拟机安装(不推荐) 使用工具:Vmware 如果不是因为迫不得已 ...

  4. [C# 面试总结]9个点如何画10条线

    问题描述 9个点画10条直线,要求每条直线上至少3个点,相信这道理题目很多朋友在面试的时候都遇到过的(同时自己在面试的时候也遇到过),所以这里记录下来以备复习. 解决方法1:

  5. JQuery Mobile - 处理图片加载失败!

    重点来了:一定要记住error事件不冒泡(如果要用js的方法替换默认出错图片,记得把img的alt属性去掉). 相关的知识点:jquery的ready方法.$("img").err ...

  6. tcp server

    SO_REUSEADDR Ignore SIGPIPE TCP_NODELAY TCP_QUICKACK

  7. 为什么transform对行内元素不生效

    注:赶时间的同学可直接下拉到底,看结论. 我使用transform对一个元素进行位移,代码如下: <div class="box"> <span>今天你吃了 ...

  8. WebDriver高级应用实例(8)

    8.1使用Log4j在测试过程中打印日志 目的:在测试过程中,使用Log4j打印日志,用于监控和后续调试测试脚本 被测网页的网址: http://www.baidu.com 环境准备: (1)访问ht ...

  9. ubuntu升级pip后, ImportError: cannot import name ‘main‘

    场景描述: 原先pip安装完成之后,一直没有更新版本,原pip版本为8.1.1,今天安装python 包pysftp的时候,提示需要升级pip到(pip 10.0.1); 于是乎,直接手到擒来,终端命 ...

  10. xamarin android 需要获取apk签名工具

    请打开vs 扩展 搜索 android keystore signature tool 如果是Release 记得查找对应的keystore 文件然后进行获取签名