用 C# 写二维码;
简介
通过 IronQR,开发人员可以为流行的图片格式创建二维码,并用背景颜色、边距、徽标对其进行自定义,甚至将其添加到 PDF 中。 对于高级用途,它还提供纠错和版本控制功能。
本文将结合实例探讨 IronQR 的主要功能,帮助您了解如何使用它在 C# 中编写二维码,并将其有效地应用到您的项目中。
目录
- 输入数据
- 文本、URLs、数字
- 二进制和流
- 导出 QR 代码
- 另存为图像。
- System.Drawing.Images
- IronSoftware.Drawing
- Stamp on PDF
- QR 代码选项
- 编码
- 错误纠正
- QR 代码版本
- 字符编码
- QR 代码样式
- 调整大小。
- 边距和边框
- Recolor
- 添加徽标
今天在您的项目中使用 IronQR,免费试用。
输入数据
文本、URL、数字
IronQR 可以将文本、URL 和数字等多种数据类型转换成 QR 码。 无论您是为市场营销和交流创建二维码链接或文本,还是为库存管理创建数字代码,抑或是将二进制数据或数据流编码为可读的二维码,IronQR 都能为您提供所需的一切支持。
此外,API 要简单明了。 QrWriter 类提供了多个重载,可将不同类型的数据作为输入,从而降低复杂性并简化流程。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-1.csusing 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");二进制和流
同样,我们可以使用前面提到的 Write 方法将二进制数据和流转换为 QR 代码。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-2.csusing 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");类别 程序 { static void Main() { // 创建二维码写入器实例 QrWriter writer = QrWriter.CreateQrCode();
// 示例二进制数据
byte[] data = { 0x01, 0x02, 0x03, 0x04 };
// 将二进制数据写入二维码
writer.Write(data).SaveAs("binary-qr.png");
// 使用内存流的示例
using (MemoryStream stream = new MemoryStream(data))
{
writer.Write(stream).SaveAs("stream-qr.png"); } } }
Write 方法具有接受字节数组和流作为输入的重载。 对于流,我们可以从字节数组创建 MemoryStream 并将其转换为 QR 代码。 当用户需要对数据块进行更精细的控制时,这将非常有用,因为流可以更节省内存。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-3.csusing 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");导出 QR 代码
IronQR 具有灵活性,可适应需要不同文件格式的各种用例。 您可以使用 SaveAs 方法将 QR 代码保存为 JPG、PNG、GIF 和 TIFF 等多种格式。
保存为图像
AnyBitmap 中的 SaveAs 方法可根据提供的文件路径自动检测文件格式。 在本例中,我指定了一个以 .png 结尾的文件路径。
[{i:(使用 SaveAs 方法时,请注意没有默认的图像格式。 如果您输入了无法识别的扩展名或在文件路径中输入了错别字,图像将以错误的扩展名保存。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-4.csusing 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");系统.绘图.图像
将图像转换为 Microsoft 的 System.Drawing.Images 对象后,您就可以使用 Bitmap 类将 QR 代码保存到文件路径中。 在此示例中,Save 方法将二维码保存为 PNG 文件,路径为 qrBitmap.png。
[{i:(System.Drawing.Common 仅支持 Windows 平台。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-5.csusing 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");Iron Software.Drawing
由于 System.Drawing.Common 缺乏跨平台兼容性,开发人员在维护跨平台应用程序时可能会遇到问题。 IronQR 可同时使用 System.Drawing.Common 和 Iron Software.Drawing 。
IronQR 使用Iron Software.Drawing中的 AnyBitmap 类,这是一个普遍兼容的 Bitmap 类,可隐含地投向以下内容:
- <代码>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 码,方便他人快速访问链接或其他资源。 支持在单页和多页上印制二维码。
加盖单页印章
创建 QR 代码后,调用 QrCode 对象中的 StampToExistingPdfPage 方法。 此方法需要提供文件路径、坐标(x 和 y)、页码以及密码(如果 PDF 受密码保护)。 提供参数后,该方法会在 QR 代码上盖章并保存 PDF。
[{i:(这种方法基于 PDF 页面,页码从 1 开始,而不是从 0 开始。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-6.csusing 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);标记为多个页面
与上面的示例类似,主要区别在于 StampToExistingPdfPages 方法需要一个页码列表,而不仅仅是一个页码。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-7.csusing 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);两个示例的输出
!a href="/static-assets/qr/tutorials/csharp-qr-writing/stamptoexistingpdfexample.gif">alt text
QR 代码选项
IronQR 提供广泛的自定义选项,可对 QR 代码行为和功能进行微调。 QrOptions 类提供了多个参数,如版本控制、编码类型、字符编码和纠错级别。 让我们来详细探讨一下这些选项。
编码
IronQR 支持创建和读取多种类型的二维码。 以下是支持的类型:
QRCode:这是目前常用的标准 QR 码。 它最多可存储 7089 个数字字符或 4296 个字母数字字符。- <代码>MicroQRCode</代码>:标准 QR 代码的缩小版,最多可存储 35 个数字字符或 21 个字母数字字符。
RMQRCode:矩形微型 QR 码是 QR 码的紧凑版本,可灵活调整长宽比。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-8.csusing 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");错误修正
IronQR 采用标准 QR 纠错技术,确保生成的所有 QR 代码即使在恶劣条件下也具有容错性和可靠性。 此外,IronQR 允许您完全控制纠错级别,以便进一步微调。
QrErrorCorrectionLevel 提供了四级纠错:
- <代码>最高</代码>:30%的纠错率
高:25% 的纠错率- <代码>中级</代码>:15% 的错误纠正
低:7% 的纠错率
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-9.csusing 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");与低纠错率的二维码相比,高纠错率的二维码在读取时具有更强的容错能力,更有可能在较低分辨率下被扫描。 您可以根据自己的使用情况进行测试。
!a href="/static-assets/qr/tutorials/csharp-qr-writing/correctionlevels.jpg">alt text
QR 代码版本
您可以调整二维码版本,以存储更多数据。 高版本是库存或物流的理想选择,而低版本则适用于较小的数据,如短 URL。 只需更改 QrOptions 对象中的 Version 属性,并将其传递给 Write 方法,即可根据需要生成 QR 代码。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-10.csusing 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");
从输出结果中可以看出,与第 5 版相比,第 40 版的二维码非常复杂和密集。
低版本需要更精确的扫描,没有更高分辨率的扫描仪可能难以扫描。 不过,更高的版本更容易扫描,即使使用较低分辨率的相机也是如此。 有关根据容量选择 QR 版本的更详细指南,请参阅 QR 版本列表。
字符编码
该选项决定了 QR 代码的编码方式。 在我们的示例中,我们将其改为 "UTF-32",而默认字符编码为 "ISO-8859-1"。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-11.csusing 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");QR 代码样式
除了简单易用的方法和处理输入数据的灵活性,IronQR 还提供了许多自定义和风格化 QR 代码的选项,使其独一无二。 QrStyleOptions 类提供了用于自定义 QR 代码各个方面的各种参数。 让我们来探讨一下可用的选项。
调整大小
要调整 QR 代码的大小,您可以设置 QrStyleOptions 对象的 Dimensions 属性,然后将其传递给 Save 方法。 默认情况下,二维码的尺寸为 300px。 在本示例中,我们将二维码的尺寸保存为 600px,而不是 300px。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-12.csusing 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");!a href="/static-assets/qr/tutorials/csharp-qr-writing/resizeQRexample.jpg">ALT text
边距和边框
要调整页边距和边框,我们可以使用 QrStyleOptions 类的 Margins 属性。 该属性可控制二维码各边的边距,默认值为 10px。 在我们的示例中,我们将页边距设置为 20px。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-13.csusing 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");!a href="/static-assets/qr/tutorials/csharp-qr-writing/qrMarginmultiple.jpg">alt text
更改每页边距
IronQR 还允许用户为每一面指定不同的页边距,提供更精细的控制。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-14.csusing 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");颜色
我们可以使用 QrStyleOptions 类为 QR 代码及其背景添加颜色。 自定义颜色可以使 QR 代码更加独特和醒目。 您可以使用 Color 和 BackgroundColor 属性更改颜色。 请务必导入 Iron Software.Drawing 以获取可分配的可用颜色列表。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-15.csusing IronQr;
using IronSoftware.Drawing;
// Load new logo image
AnyBitmap logo = AnyBitmap.FromFile("sample.png");
// Add new logo to QR code style options
QrStyleOptions styleOptions = new QrStyleOptions()
{
Logo = new QrLogo(logo, 50, 50, 10),
};
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");!a href="/static-assets/qr/tutorials/csharp-qr-writing/qrURLColored.png">alt text
添加徽标
除了颜色和尺寸,您还可以将公司徽标应用到 QR 代码中。 这有助于用户立即识别二维码并将其与您的品牌联系起来。 Logo 属性可通过添加贵公司的徽标轻松定制 QR 代码。
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-writing-15.csusing IronQr;
using IronSoftware.Drawing;
// Load new logo image
AnyBitmap logo = AnyBitmap.FromFile("sample.png");
// Add new logo to QR code style options
QrStyleOptions styleOptions = new QrStyleOptions()
{
Logo = new QrLogo(logo, 50, 50, 10),
};
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");!a href="/static-assets/qr/tutorials/csharp-qr-writing/qrURLLogo.png">alt text
自定义徽标
QrLogo 类允许进一步自定义徽标的外观。 以下是可用属性:
- <代码>位图</代码>:代表您希望用作徽标的图像。
- <代码>宽度</代码>:代表徽标的宽度。 默认值为 0。
- <代码>高度</代码>:代表徽标的高度。 默认值为 0。
- <代码>边角半径</代码>:代表徽标边角的圆角半径。 默认情况下,它被设置为 0,这意味着徽标的边角将是方形的。
using IronQRCode;
using IronSoftware.Drawing;
类别 程序
{
static void Main()
{
`QrStyleOptions` styleOptions = new `QrStyleOptions`
{
`Logo` = new `QrLogo`
{
`Bitmap` = `AnyBitmap.FromBitmap`("path/to/logo.png"),
`Width` = 50,
`Height` = 50,
`CornerRadius` = 5
}
};
`QrCode` qr = `QrWriter.CreateQrCode`()
.Write("Customized Logo Example");
qr.SaveAs("example-customized-logo-qr.png", styleOptions);
}
}using IronQRCode;
using IronSoftware.Drawing;
类别 程序
{
static void Main()
{
`QrStyleOptions` styleOptions = new `QrStyleOptions`
{
`Logo` = new `QrLogo`
{
`Bitmap` = `AnyBitmap.FromBitmap`("path/to/logo.png"),
`Width` = 50,
`Height` = 50,
`CornerRadius` = 5
}
};
`QrCode` qr = `QrWriter.CreateQrCode`()
.Write("Customized Logo Example");
qr.SaveAs("example-customized-logo-qr.png", styleOptions);
}
}检查容错能力
除了文件格式和自定义方面的广泛灵活性,灵活性还延伸到调试和错误处理方面。 IronQR 为开发人员提供了处理异常和编写单元测试以验证应用程序的各种工具。
检查和
QR 代码有时可能会损坏,但 IronQR 内置了校验和和数据校正功能,可以保证 QR 代码正常运行。 它使用 Reed-Solomon 纠错算法,确保 QR 代码保持容错性。
详细的错误信息
IronQR 提供详细的错误信息,帮助用户快速发现问题。 这些信息包含具体的异常列表,使调试和解决问题更加简单明了。 以下是该库使用的 IronQrException 的列表。
IronQrEncodingException:作为IronQrException的子类,该错误会在编写 QR 代码时出现问题。 例如,如果用户试图用空字符串创建二维码,就会出现这样的提示。
!a href="/static-assets/qr/tutorials/csharp-qr-writing/nullErrorException.gif">alt text
IronQrFileException:作为IronQrException的子类,该错误会在出现文件相关问题时发生。IronQrPdfPasswordExcception:作为IronQrException的子类,当用户尝试加盖的 PDF 受密码保护,且未提供密码或提供了不正确的密码时,将发生此错误。 它还涵盖了其他与 PDF 相关的错误,例如当 PDF 无法打开时,如示例所示。

结论
IronQR 为在 .NET 应用程序中生成和定制 QR 代码提供了一套全面的方法。 凭借其强大的功能,开发人员可以轻松创建具有各种数据编码、视觉样式和纠错级别的 QR 代码。 该库支持多种输出格式,并可无缝集成到现有文档中,是任何二维码项目的通用工具。 无论您需要的是基本的 QR 码还是高级的品牌解决方案,IronQR 都能提供灵活性和功能性,高效满足您的需求。
常见问题解答
如何在 C# 中生成 QR 码?
您可以通过使用 IronQR 中提供的 QrWriter 类在 C# 中生成二维码。此类允许您将数据写入二维码并以各种图片格式保存。只需使用 Write 方法来编码您的数据,并使用 SaveAs 来输出二维码。
我可以对二维码应用哪些类型的自定义?
IronQR 允许您通过更改颜色、添加标志、调整大小和调整边距来自定义二维码。使用 QrStyleOptions 类来应用这些自定义。
我可以使用 C# 将二维码嵌入到 PDF 中吗?
是的,您可以通过利用 StampToExistingPdfPage 或 StampToExistingPdfPages 方法使用 IronQR 将二维码嵌入到 PDF 中。这允许您指定二维码应出现的位置和页面。
如何在创建二维码时处理错误?
IronQR 具有强大的错误处理功能,提供如 IronQrEncodingException、IronQrFileException 和 IronQrPdfPasswordException 等错误消息,以协助调试和解决问题。
我可以将二维码导出为哪些格式?
使用 IronQR,您可以将二维码导出为包括 JPG、PNG、GIF 和 TIFF 在内的各种格式。SaveAs 方法允许您指定二维码输出的所需格式。
该库是否支持跨平台开发?
是的,通过 Iron Software.Drawing 库,IronQR 支持跨平台开发,使其兼容于不同的 .NET 版本和平台。
可以添加标志到二维码以用于品牌化吗?
您可以通过在 QrStyleOptions 类中设置 Logo 属性来添加标志到二维码中,让品牌二维码具有定制的标志外观。
二维码中的错误校正目的是什么?
IronQR 支持的二维码错误校正确保即使部分损坏,二维码仍然可读。此功能提供四个校正级别:最高、高、中和低,以适应不同的使用场景。
可以将哪些数据类型编码到二维码中?
IronQR 可以将多种数据类型编码到二维码中,包括文本、URL、数字、二进制数据和流,提供数据表达的灵活性。
如何用 C# 创建带有 URL 的二维码?
要在 C# 中创建带有 URL 的二维码,请在 IronQR 中使用 QrWriter 类。利用 Write 方法编码 URL,并使用 SaveAs 将二维码作为图像存储。






