ASP.NET MVC二维码和条形码
使用NET中的开源库QrCode.Net和Zing.Net来完成二维码的生成,本文主要描述的是NET中生成二维码的图片并保存在本地文件中的方法,具体操作方法请参看文章,谢谢!
·
由于做的项目需要生成二维码,今天就学习了一下NET中生成二维码的方法,描述
就现在而已,生成二维码的方法很多,其中在.NET中生成二维码可以程序集QrCode.Net和ZXing.Net,其中可以使用VS中集成的Nuget来导入程序集,这里就程序集引用不做太多说明,下面主要描述一下主要代码:
方法一:使用QrCode.Net
引用命名空间:
using Gma.QrCodeNet.Encoding;
using Gma.QrCodeNet.Encoding.Windows.Render;
后台代码
/// <summary>
/// 生成二维码
/// </summary>
/// <param name="text">待生成的二维码中内容</param>
/// <returns></returns>
[AllowAnonymous]
public ActionResult SetQRCode(string text)
{
//实例化二维码对象,参数为erorCorrectionLevel(误差校正水平)
QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.H);
QrCode qrCode = new QrCode();
//设置二维码中的内容,并对内容进行编码,生成的矩阵
qrEncoder.TryEncode(text, out qrCode);
//初始化渲染器 默认画笔将是黑色和白色,参数:Size
var renderer = new GraphicsRenderer(
//FixedModuleSize是用于渲染具有固定模块像素大小的QrCode的策略。参数:moduleSize:像素大小,silentZoneModules:空白区域的数量
new FixedModuleSize(12, QuietZoneModules.Two));
//存储流
MemoryStream ms = new MemoryStream();
renderer.WriteToStream(qrCode.Matrix, ImageFormat.Png, ms);
string buffer = Convert.ToBase64String(ms.GetBuffer());
var imageBit= new Bitmap(ms);
var image = new Bitmap(imageBit, new Size(new Point(200, 200)));//设置图片像素
var fileName = Path.Combine(Server.MapPath("~/Content"), "qrcode.png");
image.Save(fileName, ImageFormat.Png);//保存生成的二维码图片
return View();
}
显示二维码视图:
@{
ViewBag.Title = "二维码";
}
<img src=@Url.Content("~/Content/qrcode.png") />
结果如图:
方法二:使用ZXing.Net
引用命名空间:
using ZXing;
using ZXing.Common;
using ZXing.QrCode;
生成二维码和条形码后台代码:
/// <summary>
/// 生成二维码使用ZXing.Net
/// </summary>
/// <param name="text">待生成的二维码中内容</param>
/// <returns></returns>
public ActionResult GetQrCodeWithZing(string text)
{
BarcodeWriter writer = new BarcodeWriter();
writer.Format = BarcodeFormat.QR_CODE;
QrCodeEncodingOptions options = new QrCodeEncodingOptions();
options.DisableECI = true;
//设置内容编码
options.CharacterSet = "UTF-8";
//设置二维码的宽度和高度
options.Width = 500;
options.Height = 500;
//设置二维码的边距,单位不是固定像素
options.Margin = 1;
writer.Options = options;
Bitmap map = writer.Write(text);
var fileName = Path.Combine(Server.MapPath("~/Content"), "qrcodeZing.png");
map.Save(fileName, ImageFormat.Png);
map.Dispose();
return View("SetQRCode");
}
/// <summary>
/// 生成条形码使用Zing,但只支持数字,支持偶数个,最大长度80
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public ActionResult GetBarCodeWithZXing()
{
Random r = new Random();
string text = (r.Next() * 100000000).ToString();
BarcodeWriter writer = new BarcodeWriter();
//使用ITF 格式,不能被现在常用的支付宝、微信扫出来
//writer.Format = BarcodeFormat.ITF;
//如果想生成可识别的可以使用 CODE_128 格式
writer.Format = BarcodeFormat.CODE_128;
//图片大小
EncodingOptions options = new EncodingOptions()
{
Width = 500,
Height = 150,
Margin = 2
};
//选项
writer.Options = options;
Bitmap map = writer.Write(text);
var fileName = Path.Combine(Server.MapPath("~/Content"), "barcode.png");
map.Save(fileName, ImageFormat.Png);
return View("SetQRCode");
}
前台代码:
@{
ViewBag.Title = "二维码";
}
<br />
<img src=@Url.Content("~/Content/barcode.png") />
<br />
<img src=@Url.Content("~/Content/qrcodeZXing.png") />
2017年12月5日补充更新:
下面使用ThoughtWorks.QRCode这个动态链接库来生成二维码
/// <summary>
/// 生成二维码使用ThoughtWorks.QRCode
/// </summary>
/// <param name="text">待生成的二维码中内容</param>
/// <returns></returns>
public static bool GetQrCode(string text,string url)
{
try
{
Bitmap bt;
string enCodeString = text;
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
string fileName = Path.Combine(url, text + ".png");
bt.Save(fileName);
}
catch (Exception)
{
return false;
}
return true;
}
使用ThoughtWorks.QRCode生成,利用这个库来生成带Logo的二维码(就是中间嵌了一个图片的二维码):
/// <summary> /// 生成二维码使用ThoughtWorks.QRCode /// </summary> /// <param name="text">待生成的二维码中内容</param> /// <param name="url">二维码保存位置</param> /// <param name="imageUrl">logo位置</param> /// <returns></returns> public static bool GetQrCodeWithQRCode(string text, string url, string imageUrl) { string fileName = Path.Combine(url, text + ".png"); QRCodeEncoder encoder = new QRCodeEncoder(); try { //判断图片是否存在 if (!File.Exists(imageUrl)) { Bitmap bitmap; bitmap = encoder.Encode(text, Encoding.UTF8); bitmap.Save(fileName); } else { Bitmap imgBack = encoder.Encode(text, Encoding.UTF8); Image logoImg = Image.FromFile(imageUrl); Image bitmap = new Bitmap(280, 280); Graphics g = Graphics.FromImage(bitmap); g.DrawImage(imgBack, 0, 0, 280, 280); g.DrawImage(logoImg, 140 - 40, 140 - 40, 80, 80); bitmap.Save(fileName); } } catch (Exception) { return false; } return true; }
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)