ZXing.Net 的Core平台生成二维码
一、引用
二、代码
帮助类
/// <summary>
/// ZXing.NET 二维码帮助类
/// </summary>
public class ZXingHelper
{
/// <summary>
/// 站点二维码的目录
/// </summary>
private static string QRCodeDirectory = "QRCode";
/// <summary>
/// 使用zxing动态库生成二维码
/// </summary>
/// <param name="conetnt">二维码内容</param>
/// <param name="logoPath">logo图片路径,默认为空。为空时生成的二维码不带logo</param>
/// <param name="height">二维码图片高度,默认240 单位 pixels</param>
/// <param name="width">二维码图片宽度,默认240 单位 pixels</param>
/// <param name="margin">二维码图片边距,默认为0</param>
/// <returns></returns>
public static System.DrawingCore.Bitmap GenerateQRCode(string conetnt, string logoPath = "", int height = 240, int width = 240, int margin = 0)
{
try
{
BarcodeWriter barCodeWriter = new BarcodeWriter();
barCodeWriter.Format = BarcodeFormat.QR_CODE;
barCodeWriter.Options.Hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
barCodeWriter.Options.Hints.Add(EncodeHintType.ERROR_CORRECTION, ZXing.QrCode.Internal.ErrorCorrectionLevel.H);
barCodeWriter.Options.Height = height;
barCodeWriter.Options.Width = width;
barCodeWriter.Options.Margin = margin;
BitMatrix bm = barCodeWriter.Encode(conetnt);
System.DrawingCore.Bitmap qrCodeImage = barCodeWriter.Write(bm);
if (!string.IsNullOrEmpty(logoPath))
{
// 添加Logo
System.DrawingCore.Bitmap logo = new System.DrawingCore.Bitmap(logoPath);
int logoSize = (int)(qrCodeImage.Width * 0.2); // Logo大小为二维码大小的1/5
int logoX = (qrCodeImage.Width - logoSize) / 2;
int logoY = (qrCodeImage.Height - logoSize) / 2;
System.DrawingCore.Graphics qrGraphics = System.DrawingCore.Graphics.FromImage(qrCodeImage);
qrGraphics.DrawImage(logo, new System.DrawingCore.Rectangle(logoX, logoY, logoSize, logoSize));
}
return qrCodeImage;
}
catch (Exception ex)
{
return null;
}
}
/// <summary>
///生成二维码
/// </summary>
/// <param name="message"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <returns></returns>
public static byte[] Create(string message, int width = 600, int height = 600)
{
try
{
int heig = width;
if (width > height)
{
heig = height;
width = height;
}
if (string.IsNullOrWhiteSpace(message))
{
return null;
}
var w = new QRCodeWriter();
BitMatrix b = w.encode(message, BarcodeFormat.QR_CODE, width, heig);
var zzb = new BarcodeWriter();
zzb.Options = new EncodingOptions()
{
Margin = 0,
};
var b2 = zzb.Write(b);
byte[] bytes = BitmapToArray(b2);
return bytes;
}
catch (Exception ex)
{
return null;
}
}
/// <summary>
/// 将Bitmap 写为byte[]的方法
/// </summary>
/// <param name="bmp"></param>
/// <returns></returns>
public static byte[] BitmapToArray(System.DrawingCore.Bitmap bmp)
{
byte[] byteArray = null;
using (MemoryStream stream = new MemoryStream())
{
bmp.Save(stream, ImageFormat.Png);
byteArray = stream.GetBuffer();
}
return byteArray;
}
}
调用
/// <summary>
/// 获取二维码
/// </summary>
/// <param name="qrUrl"></param>
/// <returns></returns>
public byte[] GetQrCode(string qrUrl)
{
System.DrawingCore.Bitmap qrImage = null;
if (!System.IO.File.Exists(QRCodeLogoPath))
{
qrImage = ZXingHelper.GenerateQRCode(qrUrl);
}
else
{
qrImage = ZXingHelper.GenerateQRCode(qrUrl, QRCodeLogoPath);
}
MemoryStream ms = new MemoryStream();
qrImage.Save(ms, System.DrawingCore.Imaging.ImageFormat.Bmp);
byte[] bytes = ms.GetBuffer();
ms.Close();
//return ZXingHelper.Create(qrUrl);
return bytes;
}
本文来自博客园,作者:码农阿亮,转载请注明原文链接:https://www.cnblogs.com/wml-it/p/17771323.html
技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!
开源库地址,欢迎点亮:
GitHub:https://github.com/ITMingliang
Gitee: https://gitee.com/mingliang_it
GitLab: https://gitlab.com/ITMingliang
建群声明: 本着技术在于分享,方便大家交流学习的初心,特此建立【编程内功修炼交流群】,为大家答疑解惑。热烈欢迎各位爱交流学习的程序员进群,也希望进群的大佬能不吝分享自己遇到的技术问题和学习心得!进群方式:扫码关注公众号,后台回复【进群】。