苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 80407|回复: 22

[C#语言基础] C#Qrcode生成二维码支持中文,带图片,带文字

[复制链接]
发表于 2013-3-18 13:39:35 | 显示全部楼层 |阅读模式
               C#Qrcode生成二维码支持中文
带图片的操作请看二楼的帖子
当然开始需要下载一下C#Qrcode的源码 下载地址 : http://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library
直接下载
QRCode.zip (2.35 MB, 下载次数: 989)

本帖被以下淘专辑推荐:



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2013-3-18 13:48:03 | 显示全部楼层
下面是带图片的方式
[C#] 纯文本查看 复制代码
/// <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, 50, 50, 0);  
          }  
          Graphics g = Graphics.FromImage(imgBack);  
  
          g.DrawImage(imgBack, 0, 0, imgBack.Width, imgBack.Height);      //g.DrawImage(imgBack, 0, 0, 相框宽, 相框高);   
  
          //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;  
      }  
}

带图片的方法
 楼主| 发表于 2013-5-3 08:01:39 | 显示全部楼层
312899liliuzhu 发表于 2013-5-3 01:08
写的很好,上面的代码我测试过了,可以生成内嵌有图片的二维码,但是,我将二维码解密后,原来的数据信息有 ...

安说和这个无关吧。应该还是编码的问题,你修改下编码试试
 楼主| 发表于 2013-5-3 14:14:50 | 显示全部楼层
312899liliuzhu 发表于 2013-5-3 14:06
g.InterpolationMode = InterpolationMode.HighQualityBicubic;  
这一句是什么意思,我就把这句注释掉 ...

我肯定测试过啊,你注释了干什么,如果真不行,你再找找别的解决方法吧。我只会这么多。
 楼主| 发表于 2013-5-3 14:37:14 | 显示全部楼层
312899liliuzhu 发表于 2013-5-3 14:24
InterpolationMode 的命名空间是啥,我的这一句报错,没引用命名空间!

using System.Drawing.Drawing2D;
 楼主| 发表于 2013-5-3 14:48:33 | 显示全部楼层
312899liliuzhu 发表于 2013-5-3 14:45
太感谢了,我把外面的图片调大点,里面的小点,就不乱码了!但我又不想生成较大的图片,郁闷啊!!你能不能 ...

这个你自己慢慢修改下加个边框之类的就行了,我有空再修改下代码。你先研究下吧。如果成功了给分享一下。就是在画的时候左右上下留出来一点就OK了。原理是这样
 楼主| 发表于 2013-6-8 11:23:11 | 显示全部楼层
゛浮尘 发表于 2013-6-8 10:32
生成中文用byte可以,为什么用AlphaNumeric不行呢

你确定是修改正确的,我亲测过是正常的。你再细看下我的文章。别丢了什么东西
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2025-7-13 17:19

© 2014-2021

快速回复 返回顶部 返回列表