每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默。我眼中的程序员大多都不爱说话,默默承受着编程的巨大压力,除了技术上的交流外,他们不愿意也不擅长和别人交流,更不乐意任何人走进他们的内心!

废话少说,咱直接进入正题:

目前来说,比较流行的二维码生成方式有两种:一种是:QrCode.Net和谷歌的Zxing.Net,我个人比较倾向于使用ZXing.Net,今天本篇博客主要讲解Zxing.Net的使用。

本篇我会把QrCode.Net的代码和Zxing.Net的代码贴下来。其中QrCode.Net的官方网址为:http://qrcodenet.codeplex.com/  Zxing的官方网址为:http://zxingnet.codeplex.com/ 可通过官网,把dll文件下载下来,然后作为项目引用。当然,老外(外语)写的东东,看不懂也没什么,做到会用就行啦!

首先粘贴下关于QrCode.Net的代码(此代码没做验证,有兴趣的小虎斑可以自行测试),如下:

1、项目需要引用:Gma.QrCodeNet.Encoding.Net45 在官网上下载,我是VS12开发的,所以版本是4.5

代码如下:

#region  QrCode.Net
//生成二维码
static void Generate1(string url)
{
//创建二维码生成类
QrEncoder qrEncoder = new QrEncoder();
QrCode qrCode = qrEncoder.Encode(url);
//输出显示在控制台
for (int j = ; j < qrCode.Matrix.Height; j++)
{
for (int i = ; i < qrCode.Matrix.Width; i++)
{
char charToPoint = qrCode.Matrix[i, j] ? '█' : ' ';
Console.Write(charToPoint);
}
Console.WriteLine();
}
}
//生成图片
static void Generate2(string url)
{
QrEncoder qrEncoder = new QrEncoder();
QrCode qrCode = qrEncoder.Encode(url);
//保存成png文件
string filename = @"H:\桌面\截图\url.png";
GraphicsRenderer render = new GraphicsRenderer(new FixedModuleSize(, QuietZoneModules.Two), Brushes.Black, Brushes.White);
using (FileStream stream = new FileStream(filename, FileMode.Create))
{
render.WriteToStream(qrCode.Matrix, ImageFormat.Png, stream);
}
} //生成中文二维码-支持中文
static void Generate3()
{
QrEncoder qrEncoder = new QrEncoder();
QrCode qrCode = qrEncoder.Encode("我是小天马");
//保存成png文件
string filename = @"H:\桌面\截图\cn.png";
GraphicsRenderer render = new GraphicsRenderer(new FixedModuleSize(, QuietZoneModules.Two), Brushes.Black, Brushes.White); Bitmap map = new Bitmap(, );
Graphics g = Graphics.FromImage(map);
g.FillRectangle(Brushes.Red, , , , );
render.Draw(g, qrCode.Matrix, new Point(, ));
map.Save(filename, ImageFormat.Png);
} //设置二维码大小
static void Generate4()
{
QrEncoder qrEncoder = new QrEncoder();
QrCode qrCode = qrEncoder.Encode("我是小天马");
//保存成png文件
string filename = @"H:\桌面\截图\size.png";
//ModuleSize 设置图片大小
//QuietZoneModules 设置周边padding
/*
* 5----150*150 padding:5
* 10----300*300 padding:10
*/
GraphicsRenderer render = new GraphicsRenderer(new FixedModuleSize(, QuietZoneModules.Two), Brushes.Black, Brushes.White); Point padding = new Point(, );
DrawingSize dSize = render.SizeCalculator.GetSize(qrCode.Matrix.Width);
Bitmap map = new Bitmap(dSize.CodeWidth + padding.X, dSize.CodeWidth + padding.Y);
Graphics g = Graphics.FromImage(map);
render.Draw(g, qrCode.Matrix, padding);
map.Save(filename, ImageFormat.Png);
} //生成带Logo的二维码
static void Generate5()
{
QrEncoder qrEncoder = new QrEncoder();
QrCode qrCode = qrEncoder.Encode("我是小天马");
//保存成png文件
string filename = @"H:\桌面\截图\logo.png";
GraphicsRenderer render = new GraphicsRenderer(new FixedModuleSize(, QuietZoneModules.Two), Brushes.Black, Brushes.White); DrawingSize dSize = render.SizeCalculator.GetSize(qrCode.Matrix.Width);
Bitmap map = new Bitmap(dSize.CodeWidth, dSize.CodeWidth);
Graphics g = Graphics.FromImage(map);
render.Draw(g, qrCode.Matrix);
//追加Logo图片 ,注意控制Logo图片大小和二维码大小的比例
Image img = Image.FromFile(@"F:\JavaScript_Solution\QrCode\QrCode\Images\101.jpg"); Point imgPoint = new Point((map.Width - img.Width) / , (map.Height - img.Height) / );
g.DrawImage(img, imgPoint.X, imgPoint.Y, img.Width, img.Height);
map.Save(filename, ImageFormat.Png);
}
#endregion

以上代码本人并未测试,有兴趣的小虎斑可以自行测试哈!

下面说说Zxing.Net的使用,在说这个之前,本人先将做出来的东东粘贴给大家看

生成的二维码如下:

普通二维码:

带有logo的二维码:

其中Logo为:

彩色二维码(大家可根据需要,自行定制):

好了,牛也吹了,不能不上代码啊,那下面咱们来观摩下代码(别忘了引用Zxing.dll,没有的话,去官网下载哈):

 class Program
{
static void Main(string[] args)
{
//生成带有logo的二维码
string Pth = Environment.CurrentDirectory;
string LogoPth =Pth + "//logo.jpg";
string serverPth = Pth + "//" + DateTime.Now.ToString("yyyy-MM-dd") + ".Jpeg";
Generate("http://www.baidu.com", LogoPth, serverPth, ImageFormat.Jpeg);
//基础版本
Bitmap BT = GenByZXingNet_Color("Yolanda");
string baseEWM = Pth + "//base_ErWeiMa.png";
BT.Save(baseEWM, System.Drawing.Imaging.ImageFormat.Png);
//条形码
string TXMpth = Pth + "//TXM.png";
Generate("Yolanda", TXMpth, ImageFormat.Png);
//读取二维码条形码
string K = Read(TXMpth);
string H = Read(serverPth);
Console.WriteLine(K+" "+H);
Console.Read(); } #region C#生成二维码-基础版本
//需要引用ZXing.DLL 可以百度一下 一个很好用的二维码生成程序集《DLL文件啦》
//使用案例:Bitmap img3 = GenByZXingNet("");
//使用案例:img3.Save(Server.MapPath(@"\testImg\erweima.png"));
/// <summary>
/// 生成二维码
/// </summary>
/// <param name="msg">二维码信息</param>
/// <param name="codeSizeInPixels">正方形 边长</param>
/// <returns>图片</returns>
public static Bitmap GenByZXingNet(string msg,int codeSizeInPixels = )
{
BarcodeWriter writer = new BarcodeWriter();
writer.Format = BarcodeFormat.QR_CODE;
writer.Options.Hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8");//编码问题
writer.Options.Hints.Add(EncodeHintType.ERROR_CORRECTION, ZXing.QrCode.Internal.ErrorCorrectionLevel.H); writer.Options.Height = writer.Options.Width = codeSizeInPixels;
writer.Options.Margin = ;//设置边框1 ZXing.Common.BitMatrix bm = writer.Encode(msg);
Bitmap img = writer.Write(msg);
return img;
} #endregion #region C#生成带有Log的二维码
/// <summary>
/// 生成带Logo的二维码
/// </summary>
/// <param name="text">文本内容</param>
static void Generate(string text, string LogoPth, string serverPth, ImageFormat imgFrt)
{
//Logo 图片
Bitmap logo = new Bitmap(LogoPth);
//构造二维码写码器
MultiFormatWriter writer = new MultiFormatWriter();
Dictionary<EncodeHintType, object> hint = new Dictionary<EncodeHintType, object>();
hint.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
hint.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); //生成二维码
BitMatrix bm = writer.encode(text, BarcodeFormat.QR_CODE, , , hint);
BarcodeWriter barcodeWriter = new BarcodeWriter();
Bitmap map = barcodeWriter.Write(bm); //获取二维码实际尺寸(去掉二维码两边空白后的实际尺寸)
int[] rectangle = bm.getEnclosingRectangle(); //计算插入图片的大小和位置
int middleW = Math.Min((int)(rectangle[] / 3.5), logo.Width);
int middleH = Math.Min((int)(rectangle[] / 3.5), logo.Height);
int middleL = (map.Width - middleW) / ;
int middleT = (map.Height - middleH) / ; //将img转换成bmp格式,否则后面无法创建Graphics对象
Bitmap bmpimg = new Bitmap(map.Width, map.Height, PixelFormat.Format32bppArgb);
using (Graphics g = Graphics.FromImage(bmpimg))
{
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.DrawImage(map, , );
}
//将二维码插入图片
Graphics myGraphic = Graphics.FromImage(bmpimg);
//白底
myGraphic.FillRectangle(Brushes.White, middleL, middleT, middleW, middleH);
myGraphic.DrawImage(logo, middleL, middleT, middleW, middleH); //保存成图片
bmpimg.Save(serverPth, imgFrt);
}
#endregion #region ZXing生成条形码
/// <summary>
/// 文本内容
/// </summary>
/// <param name="text">只支持数字 只支持偶数个 最大长度80</param>
/// <param name="ServerPTh">存储路径 @"H:\桌面\截图\generate2.png"</param>
static void Generate(string text,string ServerPth,ImageFormat imgFrt)
{
BarcodeWriter writer = new BarcodeWriter();
//使用ITF 格式,不能被现在常用的支付宝、微信扫出来
//如果想生成可识别的可以使用 CODE_128 格式
//writer.Format = BarcodeFormat.ITF;
writer.Format = BarcodeFormat.CODE_128;
EncodingOptions options = new EncodingOptions()
{
Width = ,
Height = ,
Margin =
};
writer.Options = options;
Bitmap map = writer.Write(text);
string filename = ServerPth;//请注意 保存格式和文件扩展名一致性
map.Save(filename, imgFrt);
}
#endregion #region 二维码 条形码读取
/// <summary>
/// 二维码 条形码读取
/// </summary>
/// <param name="filename">文件路径</param>
/// <returns></returns>
static string Read(string filename)
{
BarcodeReader reader = new BarcodeReader();
reader.Options.CharacterSet = "UTF-8";
Bitmap map = new Bitmap(filename);
Result result = reader.Decode(map);
return result == null ? "" : result.Text;
}
#endregion #region C#生成特定颜色二维码-基础版本
//需要引用ZXing.DLL 可以百度一下 一个很好用的二维码生成程序集《DLL文件啦》
//使用案例:Bitmap img3 = GenByZXingNet("");
//使用案例:img3.Save(Server.MapPath(@"\testImg\erweima.png"));
/// <summary>
/// 生成二维码
/// </summary>
/// <param name="msg">二维码信息</param>
/// <param name="codeSizeInPixels">正方形 边长</param>
/// <returns>图片</returns>
public static Bitmap GenByZXingNet_Color(string msg, int codeSizeInPixels = )
{
BarcodeWriter writer = new BarcodeWriter();
writer.Renderer = new ZXing.Rendering.BitmapRenderer { Background = Color.Red, Foreground = Color.Blue };
writer.Format = BarcodeFormat.QR_CODE;
writer.Options.Hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8");//编码问题
writer.Options.Hints.Add(EncodeHintType.ERROR_CORRECTION, ZXing.QrCode.Internal.ErrorCorrectionLevel.H); writer.Options.Height = writer.Options.Width = codeSizeInPixels;
writer.Options.Margin = ;//设置边框1 ZXing.Common.BitMatrix bm = writer.Encode(msg);
Bitmap img = writer.Write(msg);
return img;
} #endregion
}

好了,上边的代码复制粘贴,即可用,

如果你问我原理,那么我只能对你说:请去米国,问问原著的作者吧!有些东东真的没必要钻牛角尖,否则,老师都会嫌弃你!

嘻嘻,牛逼吹完了,如果你感觉好,就点个赞吧!谢谢。

@陈卧龙的博客

C# 生成二维码,彩色二维码,带有Logo的二维码及普通条形码的更多相关文章

  1. C# - VS2019调用ZXing.NET实现条码、二维码和带有Logo的二维码生成

    前言 C# WinFrm程序调用ZXing.NET实现条码.二维码和带有Logo的二维码生成. ZXing.NET导入 GitHub开源库 ZXing.NET开源库githib下载地址:https:/ ...

  2. 带有logo的二维码

    摘要: 前面介绍了使用javascript生成二维码,但是这样并不能满足我们的需求,我们有时也会看到带有logo的二维码,本文就介绍如何生成带有logo的二维码. 简介: 主要使用了svg的文本和图像 ...

  3. C# - VS2019 WinFrm程序调用ZXing.NET实现条码、二维码和带有Logo的二维码的识别

    前言 C# WinFrm程序调用ZXing.NET实现条码.二维码和带有Logo的二维码的识别. ZXing.NET导入 GitHub开源库 ZXing.NET开源库githib下载地址:https: ...

  4. js生成带有logo的二维码并保存成图片下载

    生成二维码,需要依赖jquery,先引入一个jquery,然后需要一个插件改变过了jquery-qrcode.js 插件代码(需要的自己打开看): /*! jquery-qrcode v0.14.0 ...

  5. 生成一张带有logo的二维码图片

    string url = 二维码内容; , , Encoding.UTF8); // 合成活动的LOGO图片 var hasImage = GlobalTools.GetCommonContent(& ...

  6. php 使用phpqrcode类生成带有logo的二维码 使logo不失真(透明)

    在开发中 发现phpqrcode类在加入logo时,如果 logo 是 png 图像带有透明区域时,二维码上都无法正常完美的显示出来 解决方法便是:修改phpqrcode文件中的 QRimage类下的 ...

  7. (转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

    场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老 ...

  8. php--------php库生成二维码和有logo的二维码

    php生成二维码和带有logo的二维码,上一篇博客讲的是js实现二维码:php--------使用js生成二维码. 今天写的这个小案例是使用php库生成二维码: 效果图:        使用了 php ...

  9. Java实现带logo的二维码

    Java实现带logo的二维码 二维码应用到生活的各个方面,会用代码实现二维码,我想一定是一项加分的技能.好了,我们来一起实现一下吧. 我们实现的二维码是基于QR Code的标准的,QR Code是由 ...

随机推荐

  1. Nginx 笔记与总结(12)Nginx URL Rewrite 实例(ecshop)

    访问项目地址:http://192.168.254.100/ecshop 某个商品的 URL:http://192.168.254.100/ecshop/goods.php?id=3 现在需要实现把以 ...

  2. PHP 单例模式代码片段

    <?php error_reporting(E_ALL | E_STRICT); class single{ public $hash; static protected $ins = null ...

  3. redis缓存怎么存储对象

    2.把对象Object存储到redis中,怎么存?memcache存取对象是序列化和反序列化 使用通用的序列化.反序列化(频繁的会很消耗cpu,使用Google Protocol Buffer,将对象 ...

  4. TCP/IP简介

    TCP/IP协议分层 提到协议分层,我们很容易联想到ISO-OSI的七层协议经典架构,但是TCP/IP协议族的结构则稍有不同.如图所示 TCP/IP协议族按照层次由上到下,层层包装.最上面的就是应用层 ...

  5. C# 如何读取一行中的所有变量

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. Java 获取类名,函数名,行数

    C++下用宏来实现.分别是__FILE__,__func__,__LINE__分别代表,C++编译自动在每个文件中设定__FILE__类型是字符串常量 ,将__LINE__替换为当前行数,类型是数字常 ...

  7. StringUtil

    package per.son.utils; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.js ...

  8. Squid 操作实践

    Squid简介 Squid可以做什么 性能要素 Squid安装 Squid快速体验 Squid配置 Squid简介 Squid is a caching proxy for the Web suppo ...

  9. mysql创建外键出错(注意数据库表字段排序)

    1.  两个字段的类型或者大小不严格匹配.例如,如果一个是int(10),那么外键也必须设置成int(10),而不是int(11),也不能是tinyint.另外,你还必须确定两个字段是否一个为 sig ...

  10. js判断url是否有效

    方法一:(仅适用于ie) function CheckStatus(url) { XMLHTTP = new ActiveXObject("Microsoft.XMLHTTP") ...