• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#生成带logo的二维码

C#生成带logo的二维码

作者:诸葛风流 字体:[增加 减小] 来源:互联网 时间:2017-05-28

诸葛风流 通过本文主要向大家介绍了马桶c的个人空间,c语言,欲情 c max,维生素c,crh2c等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

带logo的二维码生成分为两步骤:首先根据输入的内容生成二维码图片,然后读取本地的logo图片,通过图片处理生成带logo的二维码。

生成的二维码效果如下:

下面直接贴出二维码生成类   QRCodeHelper.cs  ,直接调用  CreateQRCodeWithLogo 方法,传入相应参数返回bitmap类型的数据,直接将返回的数据绑定到图片控件,如果是web可以先将图片保存到服务器指定地址在获取显示

/// <summary>
 /// 生成带logo二维码
 /// </summary>
 public class QRCodeHelper
 {/// <summary>
  /// 创建二维码
  /// </summary>
  /// <param name="content"></param>
  /// <param name="size"></param>
  /// <returns></returns>
  public static Bitmap Create(string content)
  {
   try
   {
    //var options = new QrCodeEncodingOptions
    //{
    // DisableECI = true,
    // CharacterSet = "UTF-8",
    // Width = size,
    // Height = size,
    // Margin = 0,
    // ErrorCorrection = ErrorCorrectionLevel.H
    //};
    //var writer = new BarcodeWriter();
    //writer.Format = BarcodeFormat.QR_CODE;
    //writer.Options = options;
    //var bmp = writer.Write(content);
    //return bmp;
    QRCodeEncoder qRCodeEncoder = new QRCodeEncoder();
    qRCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//设置二维码编码格式 
    qRCodeEncoder.QRCodeScale = 4;//设置编码测量度    
    qRCodeEncoder.QRCodeVersion = 7;//设置编码版本 
    qRCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//设置错误校验 
    Bitmap image = qRCodeEncoder.Encode(content);
    return image;
   }
   catch (Exception ex)
   {
    return null;
   }
  }
  /// <summary>
  /// 获取本地图片
  /// </summary>
  /// <param name="fileName"></param>
  /// <returns></returns>
  private static Bitmap GetLocalLog(string fileName)
  {
   Bitmap newBmp = new Bitmap(fileName);
   //Bitmap bmp = new Bitmap(newBmp);
   return newBmp;
  }
  /// <summary>
  /// 生成带logo二维码
  /// </summary>
  /// <returns></returns>
  public static Bitmap CreateQRCodeWithLogo(string content, string logopath)
  {
   //生成二维码
   Bitmap qrcode = Create(content);
   //生成logo
   Bitmap logo = GetLocalLog(logopath);
   ImageUtility util = new ImageUtility();
   Bitmap finalImage = util.MergeQrImg(qrcode, logo);
   return finalImage;
  }
 }
</div>

下面是从网上找的图片处理类   ImageUtility.cs

public class ImageUtility
 {
  #region 合并用户QR图片和用户头像
  /// <summary>
  /// 合并用户QR图片和用户头像
  /// </summary>
  /// <param name="qrImg">QR图片</param>
  /// <param name="headerImg">用户头像</param>
  /// <param name="n"></param>
  /// <returns></returns>
  public Bitmap MergeQrImg(Bitmap qrImg, Bitmap headerImg, double n = 0.23)
  {
   int margin = 10;
   float dpix = qrImg.HorizontalResolution;
   float dpiy = qrImg.VerticalResolution;
   var _newWidth = (10 * qrImg.Width - 36 * margin) * 1.0f / 36;
   var _headerImg = ZoomPic(headerImg, _newWidth / headerImg.Width);
   //处理头像
   int newImgWidth = _headerImg.Width + margin;
   Bitmap headerBgImg = new Bitmap(newImgWidth, newImgWidth);
   headerBgImg.MakeTransparent();
   Graphics g = Graphics.FromImage(headerBgImg);
   g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
   g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
   g.Clear(Color.Transparent);
   Pen p = new Pen(new SolidBrush(Color.White));
   Rectangle rect = new Rectangle(0, 0, newImgWidth - 1, newImgWidth - 1);
   using (GraphicsPath path = CreateRoundedRectanglePath(rect, 1))
   {
    g.DrawPath(p, path);
    g.FillPath(new SolidBrush(Color.White), path);
   }
   //画头像
   Bitmap img1 = new Bitmap(_headerImg.Width, _headerImg.Width);
   Graphics g1 = Graphics.FromImage(img1);
   g1.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
   g1.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
   g1.Clear(Color.Transparent);
   Pen p1 = new Pen(new SolidBrush(Color.Gray));
   Rectangle rect1 = new Rectangle(0, 0, _headerImg.Width - 1, _headerImg.Width - 1);
   using (GraphicsPath path1 = CreateRoundedRectanglePath(rect1, 1))
   {
    g1.DrawPath(p1, path1);
    TextureBrush brush = new TextureBrush(_headerImg);
    g1.FillPath(brush, path1);
   }
   g1.Dispose();
   PointF center = new PointF((newImgWidth - _headerImg.Width) / 2, (newImgWidth - _headerImg.Height) / 2);
   g.DrawImage(img1, center.X, center.Y, _headerImg.Width, _headerImg.Height);
   g.Dispose();
   Bitmap backgroudImg = new Bitmap(qrImg.Width, qrImg.Height);
   backgroudImg.MakeTransparent();
   backgroudImg.SetResolution(dpix, dpiy);
   headerBgImg.SetResolution(dpix, dpiy);
   Graphics g2 = Graphics.FromImage(backgroudImg);
   g2.Clear(Color.Transparent);
   g2.DrawImage(qrImg, 0, 0);
   PointF center2 = new PointF((qrImg.Width - headerBgImg.Width) / 2, (qrImg.Height - headerBgImg.Height) / 2);
   g2.DrawImage(headerBgImg, center2);
   g2.Dispose();
   return backgroudImg;
  }
  #endregion
  #region 图形处理
  /// <summary>
  /// 创建圆角矩形
  /// </summary>
  /// <param name="rect">区域</param>
  /// <param name="cornerRadius">圆角角度</param>
  /// <returns></returns>
  private GraphicsPath CreateRoundedRectanglePath(Rectangle rect, int cornerRadius)
  {
   //下午重新整理下,圆角矩形
   GraphicsPath roundedRect = new GraphicsPath();
   roundedRect.AddArc(rect.X, rect.Y, cornerRadius * 2, cornerRadius * 2, 180, 90);
   roundedRect.AddLine(rect.X + cornerRadius, rect.Y, rect.Right - cornerRadius * 2, rect.Y);
   roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2, rect.Y, cornerRadius * 2, cornerRadius * 2, 270, 90);
   roundedRect.AddLine(rect.Right, rect.Y + cornerRadius * 2, rect.Right, rect.Y + rect.Height - cornerRadius * 2);
   roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2, rect.Y + rect.Height - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 0, 90);
   roundedRect.AddLine(rect.Right - cornerRadius * 2, rect.Bottom, rect.X + cornerRadius * 2, rect.Bottom);
   roundedRect.AddArc(rect.X, rect.Bottom - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 90, 90);
   roundedRect.AddLine(rect.X, rect.Bottom - cornerRadius * 2, rect.X, rect.Y + cornerRadius * 2);
   roundedRect.CloseFigure();
   return roundedRect;
  }
  /// <summary>
  /// 图片按比例缩放
  /// </summary>
  private Image ZoomPic(Image initImage, double n)
  {
   //缩略图宽、高计算
   double newWidth = initImage.Width;
   double newHeight = initImage.Height;
   newWidth = n * initImage.Width;
   newHeight = n * initImage.Height;
   //生成新图
   //新建一个bmp图片
   System.Drawing.Image newImage = new System.Drawing.Bitmap((int)newWidth, (int)newHeight);
   //新建一个画板
   System.Drawing.Graphics newG = System.Drawing.Graphics.FromImage(newImage);
   //设置质量
   newG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
   newG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
   //置背景色
   newG.Clear(Color.Transparent);
   //画图
   newG.DrawImage(initImage, new System.Drawing.Rectangle(0, 0, newImage.Width, newImage.Height), new System.Drawing.Rectangle(0, 0, initImage.Width, initImage.Height), System.Drawing.GraphicsUnit.Pixel);
   newG.Dispose();
   return newImage;
  }
  /// <summary>
  /// 创建缩略图
  /// </summary>
  /// <param name="b"></p



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#利用ReportViewer生成报表
  • C#基于正则去掉注释的方法示例
  • C#中new的用法及与override的区别分析
  • C#实现两个richtextbox控件滚动条同步滚动的简单方法
  • C# for循环的经典案例集锦
  • C#操作word的方法示例
  • C#使用WebClient登录网站并抓取登录后的网页信息实现方法
  • C# WinForm制作异形窗体与控件的方法
  • C#实现Excel表数据导入Sql Server数据库中的方法
  • C#使用NPOI上传excel

相关文章

  • 2017-05-28C#实现的简单验证码识别实例
  • 2017-05-28C#使用ImitateLogin模拟登录百度
  • 2017-05-28C#编程中设置程序只可被运行一次的方法
  • 2017-05-28C#实现图片上传(PC端和APP)保存及 跨域上传说明
  • 2017-05-28c#使用微信接口开发微信门户应用
  • 2017-05-28C#中判断某类型是否可以进行隐式类型转换
  • 2017-05-28C#实现汉字转拼音或转拼音首字母的方法
  • 2017-05-28C#登入实例
  • 2017-05-28通过LinQ查询字符出现次数的实例方法
  • 2017-05-28C# MVC模式中应该怎样区分应用程序逻辑(Controller层)和业务逻辑(Model层)?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#判断字符是否为汉字的三种方法分享
    • C#栈和堆的区别浅谈
    • C#实现的序列化通用类实例
    • C#实现带进度条的ListView
    • C#中的多态深入理解
    • C#不可变类型深入解析
    • datatable生成excel和excel插入图片示例详解
    • C#通过yield实现数组全排列的方法
    • c#异常处理示例分享
    • C#纹理画刷TextureBrush用法实例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有