多种⽅式C#实现⽣成(条码⼆维码)
C#通过第三⽅组件⽣成⼆维码(QR Code)和条形码(Bar Code)
⽤C#如何⽣成⼆维码,我们可以通过现有的第三⽅dll直接来实现,下⾯列出⼏种不同的⽣成⽅法:
1):通过QrCodeNet(Gma.QrCodeNet.Encoding.dll)来实现
1.1):⾸先通过VS2015的NuGet下载对应的第三⽅组件,如下图所⽰:
1.2):具体⽣成⼆维码⽅法如下
private void GenerateQRByQrCodeNet()
{
QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.H);
QrCode qrCode = new QrCode();
qrEncoder.TryEncode("Hello World. This is Eric ", out qrCode);
GraphicsRenderer renderer = new GraphicsRenderer(new FixedModuleSize(5, QuietZoneModules.Two), Brushes.Black, Brushes.White);
using (MemoryStream ms = new MemoryStream())
{
renderer.WriteToStream(qrCode.Matrix, ImageFormat.Png, ms);
中国猎头公司排名Image img = Image.FromStream(ms);
img.Save("E:/csharp-qrcode-net.png");
}
}
更多详细信息请参考如下链接:
2):通过ThoughtWorks.QRCode(ThoughtWorks.QRCode.dll)来实现
1.1):⾸先通过VS2015的NuGet下载对应的第三⽅组件,如下图所⽰:
1.2):具体⽣成⼆维码⽅法如下
private void GenerateQRByThoughtWorks()
{
QRCodeEncoder encoder = new QRCodeEncoder();
encoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//编码⽅式(注意:BYTE能⽀持中⽂,ALPHA_NUMERIC扫描出来的都是数字) encoder.QRCodeScale = 4;//⼤⼩(值越⼤⽣成的⼆维码图⽚像素越⾼)
encoder.QRCodeVersion = 0;//版本(注意:设置为0主要是防⽌编码的字符串太长时发⽣错误)
encoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//错误效验、错误更正(有4个等级)
encoder.QRCodeBackgroundColor = Color.Yellow;
encoder.QRCodeForegroundColor = Color.Green;
string qrdata = "Hello 世界! This is Eric ";
Bitmap bcodeBitmap = encoder.Encode(qrdata.ToString());
bcodeBitmap.Save(@"E:\HelloWorld.png", ImageFormat.Png);
bcodeBitmap.Dispose();
}
3):通过Spire.BarCode(Spire.BarCode.dll)来实现
1.1):⾸先通过VS2015的NuGet下载对应的第三⽅组件,如下图所⽰:
1.2):具体⽣成⼆维码⽅法如下
private void GenerateQRBySpire()
{
BarcodeSettings bs = new BarcodeSettings()
{
Data = "This is qr code: H2AMK-Z3V69-RTJZD-C7JAU-WILL4",
Type = BarCodeType.QRCode,
TopTextColor = Color.Red,
ShowCheckSumChar = false,
ShowText = false
};
//Generate the barcode based on the this.barCodeControl1
BarCodeGenerator generator = new BarCodeGenerator(bs);
Image barcode = generator.GenerateImage();
//save the barcode as an image
barcode.Save(@"E:\barcode-2d.png");
}
1.3):附加具体⽣成条形码⽅法如下
private void GenerateBarCodeBySpire()
{
BarcodeSettings bs = new BarcodeSettings()
{
Data = "This is barcode: H2AMK-Z3V69-RTJZD-C7JAU-WILL4",
ShowCheckSumChar = false,
TopTextColor = Color.Red,
ShowTopText = false,
ShowTextOnBottom = true
};
//Generate the barcode based on the this.barCodeControl1
BarCodeGenerator generator = new BarCodeGenerator(bs);
Image barcode = generator.GenerateImage();
//save the barcode as an image
barcode.Save(@"E:\barcode.png");
}
1.3):上诉代码我们发现⽣成的条形码和⼆维码带有⽔印[E-ICEBLUE],如何去除⽔印呢?请看如下代码
BarcodeSettings.ApplyKey("......");
请发送邮件到 sales@e-iceblue 免费获取对应的 key 值
更多详细信息请参考如下链接:
4):通过Barcode Rendering Framework(Zen.Barcode.Rendering.Framework.dll)来实现
4.1):⾸先通过VS2015的NuGet下载对应的第三⽅组件,如下图所⽰:
4.2):具体⽣成⼆维码⽅法如下
private void GenerateBarCodeByZen()
{
Code128BarcodeDraw barcode128 = BarcodeDrawFactory.Code128WithChecksum;
Image img = barcode128.Draw("Hello World", 40);
img.Save("E:/zenbarcode.gif");
}
4.3):附加具体⽣成条形码⽅法如下
private void GenerateQRByZen()
{
CodeQrBarcodeDraw qrcode = BarcodeDrawFactory.CodeQr;
Image img = qrcode.Draw("Hello World!", qrcode.GetDefaultMetrics(40));
img.Save("E:/zenqrcode.gif");
}
更多详细信息请参考如下链接:
5.1):具体⽣成⼆维码⽅法如下
private void GenerateQRByBarcodeLib()
{
QRCode qrbarcode = new QRCode();
qrbarcode.Encoding = QRCodeEncoding.Auto;
qrbarcode.Data = "336699885522 This is Eric Sun Testing.";
qrbarcode.ModuleSize = 10;
qrbarcode.LeftMargin = 8;
qrbarcode.RightMargin = 8;
qrbarcode.TopMargin = 8;
qrbarcode.BottomMargin = 8;
qrbarcode.ImageFormat = System.Drawing.Imaging.ImageFormat.Gif;
// Save QR Code barcode image into your system
qrbarcode.drawBarcode("E:/csharp-qrcode-lib.gif");
}
5.2):附加具体⽣成条形码⽅法如下
private void GenerateLinearByBarcodeLib()
{
Linear barcode = new Linear();
barcode.Type = BarcodeType.CODE128;
barcode.Data = "CODE128";
// other barcode settings.
// save barcode image into your system
barcode.drawBarcode("E:/barcode.png");
}
我们使⽤的是试⽤版(带⽔印的......),还有付费的正版,详情请参考如下链接:
======================================================================================= Net Core ⽣成⼆维码⼀维码
⼆维码包
⽣成⼆维码帮助类
public interface IQRCodeMoons: ISingletonDependency
{
Bitmap GetQRCode(string data, int pixel);
byte[] GetQrCodeByteArray(string data, int pixel = 4);
}
///<summary>
///⼆维码
///</summary>
public class QRCodeMoons: IQRCodeMoons
{
///<summary>
///⽣成⼆维码
///</summary>
///<param name="url">存储内容</param>
///<param name="pixel">像素⼤⼩</param>
///<returns></returns>
public Bitmap GetQRCode(string data, int pixel)
{
QRCodeGenerator generator = new QRCodeGenerator();
以家人之名原著是什么QRCodeData codeData = generator.CreateQrCode(data, QRCodeGenerator.ECCLevel.M, true);
QRCoder.QRCode qrcode = new QRCoder.QRCode(codeData);
Bitmap qrImage = qrcode.GetGraphic(pixel, Color.Black, Color.White, true);
return qrImage;
}
///<summary>
///⽣成⼆维码并转成字节
///</summary>
///<param name="data"></param>
///<param name="pixel"></param>
///<returns></returns>
public byte[] GetQrCodeByteArray(string data, int pixel = 4)
{
建设银行上班时间var bitmap = GetQRCode(data, pixel);
using (MemoryStream ms = new MemoryStream())
{
bitmap.Save(ms, ImageFormat.Jpeg);
return ms.GetBuffer();
}
}
}
直接把byte[] 字节返回给前端前端通过img标签加载⼆维码<img "data:;base64,"+⼆维码字节数组 />
前端通过img标签加载字节中的图⽚
1.在angular中直接这样通过img加载会报错提⽰不安全的url 需要对这个url进⾏消毒进⾏安全监测
注⼊消毒对象
private sanitizer: DomSanitizer
对当前地址进⾏消毒通过[src] 属性绑定的⽅式不能通过src='{{}}'这种⽅式绑定值如果对html本⽂进⾏绑定也需要通过bypassSecurityTrustHtml进⾏消毒this.imageByte= this.sanitizer.bypassSecurityTrustResourceUrl("data:;base64,"+result.qrCode)
<img *ngIf="data" [src]="imageByte" />
2.可以通过div 设置背景图⽚的⽅式避开这个问题但是调⽤js打印的时候⽆法加载背景图⽚
<div [ngStyle]="{'background-image':'url(data:;base64,'+data.qrCode+')'}"></div>
<img width="75px" src="data:;base64,{{data.qrCode}}" />
⼀维码包
⽣成⼀维码帮助类
public interface IBarCodeMoons : ISingletonDependency
{
Image GetBarCode(string data);
byte[] GetBarCodeByteArray(string data);
利威尔}
///<summary>
///⼀维码
///</summary>
public class BarCodeMoons: IBarCodeMoons
{
/
//<summary>
///⽣成⼀维码
///</summary>
///<param name="data">存储内容</param>
///<returns></returns>
public Image GetBarCode(string data)
{
BarcodeLib.Barcode b = new BarcodeLib.Barcode();
Image img = b.Encode(BarcodeLib.TYPE.CODE128, data, Color.Black, Color.White, 290, 120);
return img;
}
/
//<summary>
///⽣成⼀维码并转成字节
///</summary>
///<param name="data"></param>
///<returns></returns>
public byte[] GetBarCodeByteArray(string data)
{
var img = GetBarCode(data);
using (MemoryStream ms = new MemoryStream())
{
img.Save(ms, ImageFormat.Jpeg);
return ms.GetBuffer();
}
}
}
=======================================================================================
C# 利⽤BarcodeLib.dll⽣成条形码(⼀维,zxing,QrCodeNet/dll⼆维码)
⾸先效果:
1.BarcodeLib.dll ⼀维条码库⽀持以下条码格式
UPC-A
UPC-E
UPC 2 Digit Ext.
UPC 5 Digit Ext.
EAN-13
JAN-13
EAN-8
ITF-14
Codabar
PostNet
Bookland/ISBN
Code 11
Code 39
Code 39 Extended
Code 93
LOGMARS
MSI
Interleaved 2 of 5
Standard 2 of 5
Code 128
Code 128-A
Code 128-B
Code 128-C
Telepen
然后项⽬中添加引⽤
1.
private void button6_Click(object sender, EventArgs e)
2.
{
3.
System.Drawing.Image image;
4.
int width = 148, height = 55;
5.
string fileSavePath = AppDomain.CurrentDomain.BaseDirectory + "BarcodePattern.jpg";
6.
if (File.Exists(fileSavePath))
7.
File.Delete(fileSavePath);
8.
GetBarcode(height, width, BarcodeLib.TYPE.CODE128, "20131025-136", out image, fileSavePath);
9.
10.
pictureBox1.Image = Image.FromFile("BarcodePattern.jpg");
11.
}
12.
public static void GetBarcode(int height, int width, BarcodeLib.TYPE type, string code, out System.Drawing.Image image, string fileSaveUrl)
13.
{
14.
try
15.
{
16.
image = null;
17.
BarcodeLib.Barcode b = new BarcodeLib.Barcode();
18.
b.BackColor = System.Drawing.Color.White;//图⽚背景颜⾊
19.
b.ForeColor = System.Drawing.Color.Black;//条码颜⾊
20.
b.IncludeLabel = true;
21.
b.Alignment = BarcodeLib.AlignmentPositions.LEFT;
22.
b.LabelPosition = BarcodeLib.LabelPositions.BOTTOMCENTER;
23.
b.ImageFormat = System.Drawing.Imaging.ImageFormat.Jpeg;//图⽚格式
24.
System.Drawing.Font font = new System.Drawing.Font("verdana", 10f);//字体设置
25.
b.LabelFont = font;
26.
b.Height = height;//图⽚⾼度设置(px单位)
27.
b.Width = width;//图⽚宽度设置(px单位)
28.
29.
image = b.Encode(type, code);//⽣成图⽚
30.
image.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);
31.
32.
}
33.
catch (Exception ex)
34.
{火车票几点开售
35.
36.
image = null;
37.
}
38.
}
ZXing (ZebraCrossing)是⼀个开源的,⽀持多种格式的条形码图像处理库,。使⽤该类库可以⽅便地实现⼆维码图像的⽣成和解析。下载zxing.dll 项⽬参照引⽤
1.
{
2.
MultiFormatWriter mutiWriter = le.zxing.MultiFormatWriter();
3.
ByteMatrix bm = de(txtMsg.Text, ing.BarcodeFormat.QR_CODE, 300, 300);
4.
Bitmap img = bm.ToBitmap();
5.
pictureBox1.Image = img;
6.
7.
//⾃动保存图⽚到当前⽬录
8.
string filename = System.Environment.CurrentDirectory + "\\QR" + DateTime.Now.Ticks.ToString() + ".jpg";
9.
一年即将结束的感言img.Save(filename, System.Drawing.Imaging.ImageFormat.Jpeg);
10.
lbshow.Text = "图⽚已保存到:" + filename;
11.
}
12.
catch (Exception ee)
13.
{ MessageBox.Show(ee.Message); }
下载QrCodeNet.dll 项⽬参照引⽤
1.
private void button2_Click(object sender, EventArgs e)
2.
{
3.
var codeParams = CodeDescriptor.Init(ErrorCorrectionLevel.H, textBox1.Text.Trim(), QuietZoneModules.Two, 5);
4.
5.
codeParams.TryEncode();
6.
7.
// Render the QR code as an image
8.
using (var ms = new MemoryStream())
9.
{
10.
codeParams.Render(ms);
11.
12.
Image image = Image.FromStream(ms);
13.
pictureBox1.Image = image;
14.
if (image != null)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论