使用IRONQR

如何使用.NET MAUI进行QR码扫描

发布 2024年七月1日
分享:

介绍

在移动计算无处不在的时代,二维码正成为顺利、快速共享信息的必要工具。 从数字支付到产品包装,QR 码无所不在。 作为开发人员,在移动应用程序中添加 QR 码扫描功能可以改善用户体验,并带来大量机会。 本文将向您介绍如何使用IronQR创建一个 .NET MAUI 条形码扫描器和二维码阅读器。

如何使用 .NET MAUI 进行 QR 码扫描:图 1 - Iron QR:C# QR 代码库

如何使用.NET MAUI进行QR码扫描

  1. 安装 .NET MAUI 和 IronQR NuGet 软件包

  2. 创建主页布局

  3. 初始化相机

  4. 捕捉图像

  5. 阅读二维码

  6. 显示结果

  7. 处理权限

了解 .NET MAUI

一个名为 .NET 多平台应用程序用户界面的框架(.NET MAUI).NET》允许使用 C# 和 XAML 创建本地跨平台应用程序。 现在,开发人员只需使用一个代码库,就可以制作适用于 Windows、macOS、iOS 和 Android 的应用程序。 .NET MAUI 提供了访问本地设备功能的统一 API,使创建跨平台应用程序的过程更加轻松。 以下是 .NET MAUI 使其成为开发人员有效工具的一些关键要素:

单一项目结构

使用 .NET MAUI 将特定平台的项目合并为统一的项目结构。 由于这种统一,开发人员可以在一个项目中处理所有特定平台的资源和代码,从而简化开发流程。

跨平台用户界面

您可以设计单个用户界面(用户界面)该译文可在多个平台上使用 .NET MAUI。 该框架提供了一系列布局和控件,与 Windows、macOS、iOS 和 Android 兼容。

本地访问和集成

在 .NET MAUI 的帮助下,开发人员可以利用本地 API 和特定平台的功能,从而能够使用传感器、摄像头、GPS 和其他设备功能。 通过这样做,应用程序可以跨平台共享大部分代码库,但仍能提供本地用户体验。

热重载

.NET MAUI 支持 XAML 和 C# 的热重载。 借助这一功能,开发人员可以即时查看用户界面的变化,而无需重新启动程序。 Hot Reload 可促进快速迭代和即时反馈,从而加快开发进程。

Blazor 集成

由于 Blazor 与 .NET MAUI 的集成,开发人员可以使用 Blazor 组件创建混合应用程序。有了这种集成,通过将 Blazor 的网络开发能力与 MAUI 在本地移动开发方面的专业知识相结合,创建现代应用程序变得更加灵活。

资源管理

.NET MAUI 使跨平台的资源管理(包括图片、字体和样式)变得更加容易。 通过只定义一次资源,开发人员可以在所有目标平台上使用这些资源,从而最大限度地减少冗余,并保证外观和感觉的一致性。

依赖注入

.NET MAUI 开箱即支持依赖注入,可帮助开发人员构建测试性和可维护性更强的代码。 构建复杂的应用程序需要明确的职责分工和模块化架构,这就需要这种功能。

什么是IronQR?

用于创建和读取二维码的强大且适应性强的 .NET 库名为 IronQR。 通过为制作和读取 QR 代码提供可靠和用户友好的功能,它简化了在 .NET 应用程序中使用 QR 代码的过程。 包括 IronQR 在内的 Iron Software 软件包是一个旨在改进 .NET 编程的库集合。

IronQR 的功能

IronQR 因其广泛的功能集,对于使用二维码的开发人员来说是一款非常有用的工具。 以下是其几个显著的属性:

二维码生成

IronQR 让创建 QR 代码变得简单。 开发人员可以快速有效地从文本、URL 和其他类型的数据中生成二维码。

  • 优质 QR 码: 该库可生成高质量、高分辨率的 QR 码,适用于数字显示和打印等一系列应用。
  • 自定义选项: 您可以更改二维码的颜色、大小、边距以及其他方面。

二维码读取

IronQR 提供了从图片和数据流中读取二维码的强大功能。

  • 支持多种格式: JPEG、PNG、BMP 和 GIF 只是该库可以读取 QR 码的几种图片格式。
  • 纠错: IronQR 内置复杂的纠错功能,因此即使二维码部分破损或模糊不清,它也能正确读取。

高级定制

借助 IronQR 提供的广泛定制可能性,开发人员可以创建和解释专门针对其需求的 QR 代码。

  • 样式: 您可以在二维码中添加徽标或照片,并更改背景和前景颜色。
  • 数据编码: 通过支持多种数据编码选项,提供与多种信息格式的互操作性。

批处理

IronQR 支持批量处理,可同时创建和读取多个二维码。 需要有效处理大量 QR 代码的应用程序可能会发现这一功能特别有用。

性能和效率

由于该库的高性能设计,创建和读取 QR 代码都可以快速完成。 对于需要实时处理 QR 代码的应用程序来说,这一点至关重要。

与 .NET 生态系统整合

IronQR for .NET 可与 ASP.NET、Windows 窗体、WPF 和 Xamarin 应用程序以及其他 .NET 应用程序类型平滑集成,因此使用起来非常简单。

开始使用 .NET MAUI 应用程序

创建 C#.NET MAUI 应用程序需要安装 Visual Studio 2022 和 .NET 6 Framework。 然后,按以下步骤构建 .NET MAUI 应用程序。

打开 Visual Studio

打开 Visual Studio 后点击 "创建新项目 "按钮。 接下来,使用搜索栏查找".NET MAUI 项目"。

如何使用 .NET MAUI 进行 QR 码扫描:图 2 - 创建新项目

选择 .NET MAUI 应用程序

从 Visual Studio 的搜索结果中选择 .NET MAUI 应用程序模板。 选好之后,给它起一个合适的名字,并决定项目的举办地点。 设置完成后,请按 "下一步 "按钮。

如何使用 .NET MAUI QR 码扫描器:图 3 - 选择 .NET MAUI 应用程序模板

选择框架

选择必要的框架; 不过,建议使用最新的 .NET Framework 版本。 在 Visual Studio 中选择框架版本后,点击 "创建"。

如何使用 .NET MAUI 进行 QR 码扫描:图 4 - 根据需要选择框架

安装 IronQR

导航至 "工具 -> NuGet 包管理器 "下的 "包管理器控制台"。 在显示的命令行面板中,键入以下命令并点击 ENTER 键:

Install-Package IronQR

上述命令将把我们的库安装到正在运行的项目中,并下载它。

构建 QR 码扫描器

创建用户界面是开发 QR 码扫描器的初始阶段。 我们的基本用户界面将包括一个启动二维码扫描过程的按钮和一张显示扫描二维码的图片(用户界面)我们将使用 XAML 构建它。

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiQrScanner.MainPage">
    <StackLayout Padding="20" VerticalOptions="Center">
        <Button Text="Scan QR Code" Clicked="OnScanButtonClicked"/>
        <Image x:Name="QrCodeImage" WidthRequest="200" HeightRequest="200" VerticalOptions="CenterAndExpand"/>
        <Label x:Name="QrCodeResult" Text="Scan Result" HorizontalOptions="Center" VerticalOptions="CenterAndExpand"/>
    </StackLayout>
</ContentPage>

然后必须实现使用 IronQR 读取二维码的功能。 我们将编写一个函数来处理按钮点击事件,并用设备的摄像头拍摄二维码。

打开 "MainPage.xaml.cs "后,将以下代码添加到 "MainPage.xaml.cs "中:

using IronQr;
using IronSoftware.Drawing;
using Microsoft.Maui.Controls;
using System;
using System.IO;
using System.Threading.Tasks;

namespace MauiAppQR
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private async void OnScanButtonClicked(object sender, EventArgs e)
        {
            var result = await CaptureAndScanQrCode();
            QrCodeResult.Text = result ?? "No QR code found.";
        }

        private async Task<string> CaptureAndScanQrCode()
        {
            try
            {
                var photo = await MediaPicker.CapturePhotoAsync();
                if (photo == null)
                    return null;

                using var stream = await photo.OpenReadAsync();
                using var memoryStream = new MemoryStream();
                await stream.CopyToAsync(memoryStream);
                var imageData = memoryStream.ToArray();

                QrReader reader = new QrReader();
                var inputBmp = AnyBitmap.FromBytes(imageData);
                QrImageInput imageInput = new QrImageInput(inputBmp);

                var barcodeResult = reader.Read(imageInput);

                if (barcodeResult?.Count > 0)
                {
                    QrCodeImage.Source = ImageSource.FromStream(() => new MemoryStream(imageData));
                    return barcodeResult.First().Value;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error scanning QR code: {ex.Message}");
            }
            return null;
        }
    }
}
using IronQr;
using IronSoftware.Drawing;
using Microsoft.Maui.Controls;
using System;
using System.IO;
using System.Threading.Tasks;

namespace MauiAppQR
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private async void OnScanButtonClicked(object sender, EventArgs e)
        {
            var result = await CaptureAndScanQrCode();
            QrCodeResult.Text = result ?? "No QR code found.";
        }

        private async Task<string> CaptureAndScanQrCode()
        {
            try
            {
                var photo = await MediaPicker.CapturePhotoAsync();
                if (photo == null)
                    return null;

                using var stream = await photo.OpenReadAsync();
                using var memoryStream = new MemoryStream();
                await stream.CopyToAsync(memoryStream);
                var imageData = memoryStream.ToArray();

                QrReader reader = new QrReader();
                var inputBmp = AnyBitmap.FromBytes(imageData);
                QrImageInput imageInput = new QrImageInput(inputBmp);

                var barcodeResult = reader.Read(imageInput);

                if (barcodeResult?.Count > 0)
                {
                    QrCodeImage.Source = ImageSource.FromStream(() => new MemoryStream(imageData));
                    return barcodeResult.First().Value;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error scanning QR code: {ex.Message}");
            }
            return null;
        }
    }
}
Imports IronQr
Imports IronSoftware.Drawing
Imports Microsoft.Maui.Controls
Imports System
Imports System.IO
Imports System.Threading.Tasks

Namespace MauiAppQR
	Partial Public Class MainPage
		Inherits ContentPage

		Public Sub New()
			InitializeComponent()
		End Sub

		Private Async Sub OnScanButtonClicked(ByVal sender As Object, ByVal e As EventArgs)
			Dim result = Await CaptureAndScanQrCode()
			QrCodeResult.Text = If(result, "No QR code found.")
		End Sub

		Private Async Function CaptureAndScanQrCode() As Task(Of String)
			Try
				Dim photo = Await MediaPicker.CapturePhotoAsync()
				If photo Is Nothing Then
					Return Nothing
				End If

				Dim stream = Await photo.OpenReadAsync()
				Dim memoryStream As New MemoryStream()
				Await stream.CopyToAsync(memoryStream)
				Dim imageData = memoryStream.ToArray()

				Dim reader As New QrReader()
				Dim inputBmp = AnyBitmap.FromBytes(imageData)
				Dim imageInput As New QrImageInput(inputBmp)

				Dim barcodeResult = reader.Read(imageInput)

				If barcodeResult?.Count > 0 Then
					QrCodeImage.Source = ImageSource.FromStream(Function() New MemoryStream(imageData))
					Return barcodeResult.First().Value
				End If
			Catch ex As Exception
				Console.WriteLine($"Error scanning QR code: {ex.Message}")
			End Try
			Return Nothing
		End Function
	End Class
End Namespace
VB   C#
  • 点击扫描按钮":当用户点击 "扫描二维码 "按钮时,该方法将被调用。 要使用设备的摄像头拍照并搜索 QR 代码,需要调用 "CaptureAndScanQrCode "功能。
  • CaptureAndScanQrCode`:该方法使用设备的摄像头拍照,然后使用 IronQR 从图片中读取二维码。

    • MediaPicker.CapturePhotoAsync`:此 API 使用设备上的摄像头拍照。

    • 内存流为了便于 IronQR 读取,捕获的图像会加载到一个 MemoryStream 中。

    • QrReader.Read`:IronQR 方法从图片信息中读取二维码。

    • 图像源如果找到了 QR 代码,QR 代码文本将显示在 QrCodeResult 标签中,图像则显示在 QrCodeImage 元素中。

处理权限

访问设备摄像头需要正确的授权。 通过更新 iOS 和 Android 的项目文件,提出必要的许可请求。

安卓

访问 AndroidManifest.xml,并包含随后的授权:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
XML

MainActivity.cs 中请求权限:

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    Platform.Init(this, savedInstanceState);
    Xamarin.Essentials.Platform.RequestPermissions(this, new string[] 
    {
        Android.Manifest.Permission.Camera,
        Android.Manifest.Permission.WriteExternalStorage,
        Android.Manifest.Permission.ReadExternalStorage
    });
}
protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    Platform.Init(this, savedInstanceState);
    Xamarin.Essentials.Platform.RequestPermissions(this, new string[] 
    {
        Android.Manifest.Permission.Camera,
        Android.Manifest.Permission.WriteExternalStorage,
        Android.Manifest.Permission.ReadExternalStorage
    });
}
Protected Overrides Sub OnCreate(ByVal savedInstanceState As Bundle)
	MyBase.OnCreate(savedInstanceState)
	Platform.Init(Me, savedInstanceState)
	Xamarin.Essentials.Platform.RequestPermissions(Me, New String() { Android.Manifest.Permission.Camera, Android.Manifest.Permission.WriteExternalStorage, Android.Manifest.Permission.ReadExternalStorage })
End Sub
VB   C#

以下是在 Windows 机器环境下生成的输出结果。

如何使用 .NET MAUI QR 码扫描器:图 5 - 单击扫描 QR 代码

扫描后,完成的结果将显示在标签上。

如何使用 .NET MAUI 进行 QR 码扫描:图 6 - 使用 IronQR 扫描 QR 码的输出示例

结论

使用 .NET MAUI 和 IronQR 创建一个 .NET MAUI QR 码扫描器是一个简单的过程,可以大大提高移动应用程序的功能。IronQR 处理 QR 代码的强大功能和 .NET MAUI 的跨平台能力让您可以为 Windows、iOS、macOS 和 Android 构建有效可靠的 QR 代码扫描器。

IronQR for .NET 和 .NET MAUI 可共同提供流畅的开发流程,让您专注于创建尖端功能和制作一流的应用程序。 无论您是要创建一个简单的二维码扫描器,还是要创建一个具有尖端二维码功能的复杂应用程序,本教程都将为您的入门提供坚实的基础。

如果您想进一步简化开发流程,请考虑使用 IronQR 满足您的 QR 代码要求。 即使在困难的情况下,IronQR 也能生成清晰、可扩展且具有强大读取能力的 QR 代码。 IronQR 可提供满足您独特需求的解决方案,为个人开发者、小型团队和大型公司提供可定制的 License 选择。 请访问 购买许可证 并查看全面的定价详情,加入依赖 Iron Software 提供基本开发工具的众多开发人员的行列,使用 IronQR 提升您的应用程序。

对于 Iron Software Suite 中的其他类似产品,IronBarcode 可作为扫描条形码的对应工具。 使用 IronBarcode,您可以将高性能条形码扫描功能无缝集成到您的应用程序中,使其成为满足条形码扫描相关需求的绝佳选择。

下一步 >
如何在ASP .NET Core中生成QR码

准备开始了吗? 版本: 2024.12 刚刚发布

免费NuGet下载 总下载量: 22,660 查看许可证 >