用C#编写QR码
介绍
通过 IronQR,开发人员可以为流行的图片格式创建二维码,并用背景颜色、边距、徽标对其进行自定义,甚至将其添加到 PDF 中。 对于高级用途,它还提供纠错和版本控制功能。
本文将结合实例探讨 IronQR 的主要功能,帮助您了解如何使用它在 C# 中编写二维码,并将其有效地应用到您的项目中。
目录
输入数据
- 二进制和流
导出二维码
- 在 PDF 上加印章
二维码选项
- 字符编码
二维码样式
立即在您的项目中开始使用IronQR,并享受免费试用。
输入数据
文本、URL、数字
IronQR 可以将文本、URL 和数字等多种数据类型转换成 QR 码。 无论您是为市场营销和交流创建二维码链接或文本,还是为库存管理创建数字代码,抑或是将二进制数据或数据流编码为可读的二维码,IronQR 都能为您提供所需的一切支持。
此外,API 要简单明了。 QrWriter 类提供了多种重载,支持不同类型的数据作为输入,从而降低复杂性并简化流程。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-1.cs
using IronQr;
using IronSoftware.Drawing;
string text = "Hello, World!";
string url = "https://ironsoftware.com/csharp/qr/";
string alphanumeric = "WATERSKU-12356";
// Create QR code
QrCode textQr = QrWriter.Write(text);
// Save QR code as a bitmap
AnyBitmap textQrImage = textQr.Save();
// Save QR code as file
textQrImage.SaveAs("textQr.png");
QrCode urlQr = QrWriter.Write(url);
AnyBitmap urlQrImage = urlQr.Save();
urlQrImage.SaveAs("urlQr.png");
QrCode alphanumericQr = QrWriter.Write(alphanumeric);
AnyBitmap alphanumericQrImage = alphanumericQr.Save();
alphanumericQrImage.SaveAs("alphanumericQr.png");
Imports IronQr
Imports IronSoftware.Drawing
Private text As String = "Hello, World!"
Private url As String = "https://ironsoftware.com/csharp/qr/"
Private alphanumeric As String = "WATERSKU-12356"
' Create QR code
Private textQr As QrCode = QrWriter.Write(text)
' Save QR code as a bitmap
Private textQrImage As AnyBitmap = textQr.Save()
' Save QR code as file
textQrImage.SaveAs("textQr.png")
Dim urlQr As QrCode = QrWriter.Write(url)
Dim urlQrImage As AnyBitmap = urlQr.Save()
urlQrImage.SaveAs("urlQr.png")
Dim alphanumericQr As QrCode = QrWriter.Write(alphanumeric)
Dim alphanumericQrImage As AnyBitmap = alphanumericQr.Save()
alphanumericQrImage.SaveAs("alphanumericQr.png")
二进制和流
同样地,我们可以使用前面提到的相同Write
方法将二进制数据和流转换为QR码。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-2.cs
using IronQr;
using IronSoftware.Drawing;
using System.Text;
byte[] bytes = Encoding.UTF8.GetBytes("https://ironsoftware.com/csharp/qr/");
// Create QR code
QrCode bytesQr = QrWriter.Write(bytes);
// Save QR code as a bitmap
AnyBitmap qrImage = bytesQr.Save();
// Save QR code bitmap to file
qrImage.SaveAs("bytesQr.png");
Imports IronQr
Imports IronSoftware.Drawing
Imports System.Text
Private bytes() As Byte = Encoding.UTF8.GetBytes("https://ironsoftware.com/csharp/qr/")
' Create QR code
Private bytesQr As QrCode = QrWriter.Write(bytes)
' Save QR code as a bitmap
Private qrImage As AnyBitmap = bytesQr.Save()
' Save QR code bitmap to file
qrImage.SaveAs("bytesQr.png")
Write
方法具有重载功能,可以接受字节数组和流作为输入。 对于流,我们可以从字节数组创建一个MemoryStream,然后将其转换为QR码。 当用户需要对数据块进行更精细的控制时,这将非常有用,因为流可以更加节省内存。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-3.cs
using IronQr;
using IronSoftware.Drawing;
using System.IO;
using System.Text;
MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes("https://ironsoftware.com/csharp/qr/"));
// Create QR code
QrCode streamQr = QrWriter.Write(stream);
// Save QR code as a bitmap
AnyBitmap streamQrImage = streamQr.Save();
// Save QR code bitmap as file
streamQrImage.SaveAs("streamQr.png");
Imports IronQr
Imports IronSoftware.Drawing
Imports System.IO
Imports System.Text
Private stream As New MemoryStream(Encoding.UTF8.GetBytes("https://ironsoftware.com/csharp/qr/"))
' Create QR code
Private streamQr As QrCode = QrWriter.Write(stream)
' Save QR code as a bitmap
Private streamQrImage As AnyBitmap = streamQr.Save()
' Save QR code bitmap as file
streamQrImage.SaveAs("streamQr.png")
导出 QR 代码
IronQR 具有灵活性,可适应需要不同文件格式的各种用例。 您可以使用SaveAs
方法将二维码保存为JPG、PNG、GIF和TIFF等多种格式。
另存为图片
SaveAs
方法来自 AnyBitmap,会根据提供的文件路径自动检测文件格式。 在本例中,我指定了一个以 .png 结尾的文件路径。
请注意
SaveAs
方法时,请注意没有默认的图像格式。 如果您输入无法识别的扩展名或在文件路径中输入错字,图像将以不正确的扩展名保存。:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-4.cs
using IronQr;
using IronSoftware.Drawing;
// Create a QR code object
QrCode qr = QrWriter.Write("hello world");
// Save QR code as a bitmap
AnyBitmap qrImage = qr.Save();
// Save QR code bitmap as file
qrImage.SaveAs("qr.png");
Imports IronQr
Imports IronSoftware.Drawing
' Create a QR code object
Private qr As QrCode = QrWriter.Write("hello world")
' Save QR code as a bitmap
Private qrImage As AnyBitmap = qr.Save()
' Save QR code bitmap as file
qrImage.SaveAs("qr.png")
System.Drawing.Images
将图像转换为来自 Microsoft 的System.Drawing.Images对象,允许您使用Bitmap类将二维码保存到文件路径。 在此示例中,Save
方法将 QR 码作为 PNG 文件保存到路径 'qrBitmap.png'。
[{i:(请注意,System.Drawing.Common 仅支持 Windows 平台。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-5.cs
using IronQr;
using System.Drawing;
// Create a QR code object
QrCode qr = QrWriter.Write("hello world");
// Save QR code as a bitmap
Bitmap qrImage = qr.Save();
// Save QR code bitmap as file
qrImage.Save("qrBitmap.png");
Imports IronQr
Imports System.Drawing
' Create a QR code object
Private qr As QrCode = QrWriter.Write("hello world")
' Save QR code as a bitmap
Private qrImage As Bitmap = qr.Save()
' Save QR code bitmap as file
qrImage.Save("qrBitmap.png")
IronSoftware.Drawing
由于System.Drawing.Common缺乏跨平台兼容性,开发人员在维护跨平台应用程序时可能会遇到问题。 IronQR 可以同时利用 System.Drawing.Common 和 IronSoftware.Drawing。
IronQR使用IronSoftware.Drawing中的AnyBitmap类,这是一种具有普遍兼容性的位图类,可以隐式转换为以下格式:
- System.Drawing.Bitmap
- System.Drawing.Image
- SkiaSharp.SKBitmap
- SixLabors.ImageSharp
Microsoft.Maui.Graphics.Platform.PlatformImage
通过这个强大的开源库,IronQR 实现了跨平台支持,并兼容 .NET 8、.NET 7、.NET 6、.NET 5、.NET Core、.NET Standard 和 .NET Framework 4.6.2+。 要了解有关该库的更多信息,请参考IronSoftware.Drawing 网站。
在 PDF 上盖章
IronQR 允许开发人员在现有 PDF 文档上加盖 QR 码,方便他人快速访问链接或其他资源。 支持在单页和多页上印制二维码。
单页加印
创建二维码后,从QrCode对象调用StampToExistingPdfPage
方法。 此方法需要文件路径、坐标(x 和 y)、页码,以及可选的密码(如果 PDF 受密码保护)。 一旦提供了参数,该方法就会在二维码上盖章并保存 PDF。
请注意
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-6.cs
using IronQr;
// Create a QR code object
QrCode qr = QrWriter.Write("hello world");
string filepath = "example.pdf";
int x = 100;
int y = 150;
int page = 1;
// Stamp QR code to (100, 150) of the pdf on page 1
qr.StampToExistingPdfPage(filepath, x, y, page);
Imports IronQr
' Create a QR code object
Private qr As QrCode = QrWriter.Write("hello world")
Private filepath As String = "example.pdf"
Private x As Integer = 100
Private y As Integer = 150
Private page As Integer = 1
' Stamp QR code to (100, 150) of the pdf on page 1
qr.StampToExistingPdfPage(filepath, x, y, page)
戳记到多个页面
与上面的示例类似,主要区别在于StampToExistingPdfPages
方法接受一个页码列表,而不是仅仅一个页。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-7.cs
using IronQr;
using System.Collections.Generic;
// Create a QR code object
QrCode qr = QrWriter.Write("hello world");
string filepath = "example.pdf";
int x = 100;
int y = 150;
List<int> pages = new List<int>();
pages.Add(1);
pages.Add(2);
pages.Add(3);
pages.Add(4);
// Stamp QR code to (100, 150) of the pdf on pages 1-4
qr.StampToExistingPdfPages(filepath, x, y, pages);
Imports IronQr
Imports System.Collections.Generic
' Create a QR code object
Private qr As QrCode = QrWriter.Write("hello world")
Private filepath As String = "example.pdf"
Private x As Integer = 100
Private y As Integer = 150
Private pages As New List(Of Integer)()
pages.Add(1)
pages.Add(2)
pages.Add(3)
pages.Add(4)
' Stamp QR code to (100, 150) of the pdf on pages 1-4
qr.StampToExistingPdfPages(filepath, x, y, pages)
两个示例的输出结果
QR 码选项
IronQR 提供广泛的自定义选项,可对 QR 代码行为和功能进行微调。 QrOptions 类提供了多个参数,例如版本控制、编码类型、字符编码和错误纠正级别。 让我们来详细探讨一下这些选项。
编码
IronQR 支持创建和读取多种类型的二维码。 以下是支持的类型:
- 二维码:这是今天常用的标准二维码。 它最多可存储 7089 个数字字符或 4296 个字母数字字符。
- MicroQRCode:标准 QR 码的缩小版本,可以存储最多 35 个数字字符或 21 个字母数字字符。
- RMQRCode:矩形微型二维码是二维码的紧凑版本,提供了其纵横比的灵活性。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-8.cs
using IronQr;
using IronSoftware.Drawing;
QrOptions options = new QrOptions
{
// Change encoding to micro QR code
Encoding = IronQr.Enum.QrEncoding.MicroQRCode,
};
// Create QR code
QrCode qr = QrWriter.Write("1234", options);
// Save QR code as a bitmap
AnyBitmap qrImage = qr.Save();
// Save QR code bitmap as file
qrImage.SaveAs("qrImage.png");
Imports IronQr
Imports IronSoftware.Drawing
Private options As New QrOptions With {.Encoding = IronQr.Enum.QrEncoding.MicroQRCode}
' Create QR code
Private qr As QrCode = QrWriter.Write("1234", options)
' Save QR code as a bitmap
Private qrImage As AnyBitmap = qr.Save()
' Save QR code bitmap as file
qrImage.SaveAs("qrImage.png")
纠错
IronQR 采用标准 QR 纠错技术,确保生成的所有 QR 代码即使在恶劣条件下也具有容错性和可靠性。 此外,IronQR 允许您完全控制纠错级别,以便进一步微调。
有四种级别的错误校正可用,由QrErrorCorrectionLevel提供:
- 最高: 30% 错误校正
- 高: 25% 错误更正
- 中等:15%错误修正
- 低:7% 的纠错
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-9.cs
using IronQr;
using IronSoftware.Drawing;
QrOptions options = new QrOptions
{
// Change error correction level to medium
ErrorCorrectionLevel = QrErrorCorrectionLevel.Medium,
};
// Create QR code
QrCode qr = QrWriter.Write("1234", options);
// Save QR code as a bitmap
AnyBitmap qrImage = qr.Save();
// Save QR code bitmap as file
qrImage.SaveAs("qrImage.png");
Imports IronQr
Imports IronSoftware.Drawing
Private options As New QrOptions With {.ErrorCorrectionLevel = QrErrorCorrectionLevel.Medium}
' Create QR code
Private qr As QrCode = QrWriter.Write("1234", options)
' Save QR code as a bitmap
Private qrImage As AnyBitmap = qr.Save()
' Save QR code bitmap as file
qrImage.SaveAs("qrImage.png")
与低纠错率的二维码相比,高纠错率的二维码在读取时具有更强的容错能力,更有可能在较低分辨率下被扫描。 您可以根据自己的使用情况进行测试。
二维码版本
您可以调整二维码版本,以存储更多数据。 高版本是库存或物流的理想选择,而低版本则适用于较小的数据,如短 URL。 只需更改 QrOptions 对象中的 Version 属性,并将其传递给 Write
方法,即可按需生成 QR 码。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-10.cs
using IronQr;
using IronSoftware.Drawing;
QrOptions options = new QrOptions
{
// Change QR code version to 40
Version = 40,
};
// Create QR code
QrCode qr = QrWriter.Write("1234", options);
// Save QR code as a bitmap
AnyBitmap qrImage = qr.Save();
// Save QR code bitmap as file
qrImage.SaveAs("qrImage.png");
Imports IronQr
Imports IronSoftware.Drawing
Private options As New QrOptions With {.Version = 40}
' Create QR code
Private qr As QrCode = QrWriter.Write("1234", options)
' Save QR code as a bitmap
Private qrImage As AnyBitmap = qr.Save()
' Save QR code bitmap as file
qrImage.SaveAs("qrImage.png")
从输出结果中可以看出,与第 5 版相比,第 40 版的二维码非常复杂和密集。
低版本需要更精确的扫描,没有更高分辨率的扫描仪可能难以扫描。 不过,更高的版本更容易扫描,即使使用较低分辨率的相机也是如此。 有关根据容量选择 QR 版本的更详细指南,请参阅QR 版本列表。
字符编码
该选项决定了 QR 代码的编码方式。 在我们的示例中,我们将其改为 "UTF-32",而默认字符编码为 "ISO-8859-1"。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-11.cs
using IronQr;
using IronSoftware.Drawing;
QrOptions options = new QrOptions
{
// Change character encoding to UTF-32
CharacterEncoding = "UTF-32"
};
// Create QR code
QrCode qr = QrWriter.Write("1234", options);
// Save QR code as a bitmap
AnyBitmap qrImage = qr.Save();
// Save QR code bitmap as file
qrImage.SaveAs("qrImage.png");
Imports IronQr
Imports IronSoftware.Drawing
Private options As New QrOptions With {.CharacterEncoding = "UTF-32"}
' Create QR code
Private qr As QrCode = QrWriter.Write("1234", options)
' Save QR code as a bitmap
Private qrImage As AnyBitmap = qr.Save()
' Save QR code bitmap as file
qrImage.SaveAs("qrImage.png")
QR 代码样式
除了简单易用的方法和处理输入数据的灵活性,IronQR 还提供了许多自定义和风格化 QR 代码的选项,使其独一无二。 QrStyleOptions 类提供了各种参数,用于自定义 QR 码的各个方面。 让我们来探讨一下可用的选项。
调整大小
要调整二维码的大小,您可以设置QrStyleOptions对象的Dimensions属性,然后将其传递给Save
方法。 默认情况下,二维码的尺寸为 300px。 在本示例中,我们将二维码的尺寸保存为 600px,而不是 300px。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-12.cs
using IronQr;
using IronSoftware.Drawing;
QrStyleOptions styleOptions = new QrStyleOptions()
{
// Change the dimensions to 600px
Dimensions = 600,
};
string url = "https://ironsoftware.com/csharp/qr/";
// Create QR code
QrCode qr = QrWriter.Write(url);
// Save QR code as a bitmap
AnyBitmap qrImage = qr.Save(styleOptions);
// Save QR code bitmap as file
qrImage.SaveAs("qrURLResized.png");
Imports IronQr
Imports IronSoftware.Drawing
Private styleOptions As New QrStyleOptions() With {.Dimensions = 600}
Private url As String = "https://ironsoftware.com/csharp/qr/"
' Create QR code
Private qr As QrCode = QrWriter.Write(url)
' Save QR code as a bitmap
Private qrImage As AnyBitmap = qr.Save(styleOptions)
' Save QR code bitmap as file
qrImage.SaveAs("qrURLResized.png")
页边距和边框
要调整页边距和边框,我们可以使用QrStyleOptions类的Margins属性。 该属性可控制二维码各边的边距,默认值为 10px。 在我们的示例中,我们将页边距设置为 20px。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-13.cs
using IronQr;
using IronSoftware.Drawing;
QrStyleOptions styleOptions = new QrStyleOptions()
{
// Change margins to 20px
Margins = 20
};
string url = "https://ironsoftware.com/csharp/qr/";
// Create QR code
QrCode qr = QrWriter.Write(url);
// Save QR code as a bitmap
AnyBitmap qrImage = qr.Save(styleOptions);
// Save QR code bitmap as file
qrImage.SaveAs("qrURLMarginMultiple.png");
Imports IronQr
Imports IronSoftware.Drawing
Private styleOptions As New QrStyleOptions() With {.Margins = 20}
Private url As String = "https://ironsoftware.com/csharp/qr/"
' Create QR code
Private qr As QrCode = QrWriter.Write(url)
' Save QR code as a bitmap
Private qrImage As AnyBitmap = qr.Save(styleOptions)
' Save QR code bitmap as file
qrImage.SaveAs("qrURLMarginMultiple.png")
更改每边的页边距
IronQR 还允许用户为每一面指定不同的页边距,提供更精细的控制。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-14.cs
using IronQr;
using IronSoftware.Drawing;
QrStyleOptions styleOptions = new QrStyleOptions()
{
// Change margins
MarginBottom = 30,
MarginTop = 100,
MarginRight = 40,
MarginLeft = 20,
};
string url = "https://ironsoftware.com/csharp/qr/";
// Create QR code
QrCode qr = QrWriter.Write(url);
// Save QR code as a bitmap
AnyBitmap qrImage = qr.Save(styleOptions);
// Save QR code bitmap as file
qrImage.SaveAs("qrURLMarginMultiple.png");
Imports IronQr
Imports IronSoftware.Drawing
Private styleOptions As New QrStyleOptions() With {
.MarginBottom = 30,
.MarginTop = 100,
.MarginRight = 40,
.MarginLeft = 20
}
Private url As String = "https://ironsoftware.com/csharp/qr/"
' Create QR code
Private qr As QrCode = QrWriter.Write(url)
' Save QR code as a bitmap
Private qrImage As AnyBitmap = qr.Save(styleOptions)
' Save QR code bitmap as file
qrImage.SaveAs("qrURLMarginMultiple.png")
色彩
我们可以使用QrStyleOptions类为二维码及其背景添加颜色。 自定义颜色可以使 QR 代码更加独特和醒目。 您可以使用 Color 和 BackgroundColor 属性更改颜色。 请务必导入IronSoftware.Drawing以获取可分配颜色的列表。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-15.cs
using IronQr;
using IronSoftware.Drawing;
QrStyleOptions styleOptions = new QrStyleOptions()
{
// Change color
BackgroundColor = Color.Blue,
Color = Color.Red
};
string url = "https://ironsoftware.com/csharp/qr/";
// Create QR code
QrCode qr = QrWriter.Write(url);
// Save QR code as a bitmap
AnyBitmap qrImage = qr.Save(styleOptions);
// Save QR code bitmap as file
qrImage.SaveAs("qrURLColored.png");
Imports IronQr
Imports IronSoftware.Drawing
Private styleOptions As New QrStyleOptions() With {
.BackgroundColor = Color.Blue,
.Color = Color.Red
}
Private url As String = "https://ironsoftware.com/csharp/qr/"
' Create QR code
Private qr As QrCode = QrWriter.Write(url)
' Save QR code as a bitmap
Private qrImage As AnyBitmap = qr.Save(styleOptions)
' Save QR code bitmap as file
qrImage.SaveAs("qrURLColored.png")
添加徽标
除了颜色和尺寸,您还可以将公司徽标应用到 QR 代码中。 这有助于用户立即识别二维码并将其与您的品牌联系起来。 Logo属性让您可以轻松地通过添加公司徽标来定制二维码。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-15.cs
using IronQr;
using IronSoftware.Drawing;
QrStyleOptions styleOptions = new QrStyleOptions()
{
// Change color
BackgroundColor = Color.Blue,
Color = Color.Red
};
string url = "https://ironsoftware.com/csharp/qr/";
// Create QR code
QrCode qr = QrWriter.Write(url);
// Save QR code as a bitmap
AnyBitmap qrImage = qr.Save(styleOptions);
// Save QR code bitmap as file
qrImage.SaveAs("qrURLColored.png");
Imports IronQr
Imports IronSoftware.Drawing
Private styleOptions As New QrStyleOptions() With {
.BackgroundColor = Color.Blue,
.Color = Color.Red
}
Private url As String = "https://ironsoftware.com/csharp/qr/"
' Create QR code
Private qr As QrCode = QrWriter.Write(url)
' Save QR code as a bitmap
Private qrImage As AnyBitmap = qr.Save(styleOptions)
' Save QR code bitmap as file
qrImage.SaveAs("qrURLColored.png")
自定义徽标
QrLogo 类允许进一步自定义标志的外观。 以下是可用的属性:
- 位图:表示您想用作徽标的图像。
- 宽度:表示徽标的宽度。 默认值为 0。
- 高度:表示标志的高度。 默认值为 0。
- CornerRadius:表示用于圆角化徽标角的半径。 默认情况下,它被设置为 0,这意味着徽标的边角将是方形的。
检查容错性
除了文件格式和自定义方面的广泛灵活性,灵活性还延伸到调试和错误处理方面。 IronQR 为开发人员提供了处理异常和编写单元测试以验证应用程序的各种工具。
校验和
QR 代码有时可能会损坏,但 IronQR 内置了校验和和数据校正功能,可以保证 QR 代码正常运行。 它使用了Reed-Solomon 纠错算法,确保二维码具有容错性。
详细错误信息
IronQR 提供详细的错误信息,帮助用户快速发现问题。 这些信息包含具体的异常列表,使调试和解决问题更加简单明了。 以下是库中使用的IronQrException列表。
IronQrEncodingException:作为IronQrException的子类,当生成二维码时出现问题时会引发此错误。 例如,如果用户试图用空字符串创建二维码,就会出现这样的提示。
- IronQrFileException:IronQrException的子类,当出现与文件相关的问题时会发生此错误。
IronQrPdfPasswordExcception:这是IronQrException的一个子类。当用户尝试标记的PDF受到密码保护,并且未提供密码或提供了错误的密码时,会引发此错误。 它还涵盖了其他与 PDF 相关的错误,例如当 PDF 无法打开时,如示例所示。
结论
IronQR 为在 .NET 应用程序中生成和定制 QR 代码提供了一套全面的方法。 凭借其强大的功能,开发人员可以轻松创建具有各种数据编码、视觉样式和纠错级别的 QR 代码。 该库支持多种输出格式,并可无缝集成到现有文档中,是任何二维码项目的通用工具。 无论您需要的是基本的 QR 码还是高级的品牌解决方案,IronQR 都能提供灵活性和功能性,高效满足您的需求。