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 调用c++程序实例

    1.java程序: package com.zhangshitong; import java.io.File; public class Java2cpp { static{ System.load ...

  2. spring 框架整合mybatis的源码分析

    问题:spring 在整合mybatis的时候,我们是看不见sqlSessionFactory,和sqlsession(sqlsessionTemplate 就是sqlsession的具体实现)的,这 ...

  3. List of RGBD datasets

    This is an incomplete list of datasets which were captured using a Kinect or similar devices. I init ...

  4. ajax调用WebMethed返回处理请求时出错

    ajax post调用WebMethed报错,返回的信息如下: {“Message”:“处理请求时出错”,“StackTrace”:“”,“ExceptionType”:“”} 查了一下WebMeth ...

  5. WinForm企业级框架实战项目演练

    一.课程介绍 我们都知道在软件架构方式分为:C/S和B/S两类.这里阿笨不谈论两种软件架构的优劣之分,因为它们各有千秋,用于不同场合.一位伟大的讲师曾经说过一句话:事物存在即合理!录制这堂课程的目的就 ...

  6. 真实项目中VS2015中自建T4模板生成文件的使用

    有可能许多小伙伴们发现,vs2015和2012的自带T4模板中的.tt文件改变非常之多,如果仅仅copyEF系统自己生成的模板文件,那可累了.以下是我自己整理的在2012和2015中都可以试用的代码. ...

  7. Android-----application的学习

    一.Application的对象回调函数 1.onCreate : Application对象被创建时候会调用 2.onConfigurationChanged : 屏幕方向变化.系统语言的更改等 3 ...

  8. 第十三章 ReentrantLock 简介

    Java 5.0 提供的新的加锁机制:当内置加锁机制不适合时 , 作为一种可选择的高级功能 一个可重入的互斥锁 Lock,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁相同的一 ...

  9. 【sping揭秘】4、某些无法注册到IOC容器的对象如何交给spring托管

    可以实现spring的factoryBean 接口,这样可以加入spring的IOC容器 比如现在有一个类叫MyObject,我们没有这个对象的源码,无法对这个对象进行操作,那么我们如何加入sprin ...

  10. 【liferay】4、liferay的权限体系

    liferay中有几个概念 1.user_ 表存放liferay的用户 2.usergroup 用户组 3.角色 4.组织,组织可以是站点的成员 5.站点 6.团队 liferay中所有的东西都被视为 ...