使用IRONQR

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

发布 2024年七月1日
分享:

简介

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

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

如何使用 .NET MAUI QR 码扫描器

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

2.创建主页面布局

3.初始化相机

4.捕捉图像

5.读取 QR 码

6.显示结果

7.处理权限

了解 .NET MAUI

名为 .NET 多平台应用程序用户界面的框架 (.NET MAUI) 允许使用 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# 的热重载。在此功能的帮助下,开发人员可以即时查看用户界面的变化,而无需重新启动程序。热重载有利于快速迭代和即时反馈,从而加快开发进程。

Blazor 集成

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

资源管理

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

依赖注入

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

什么是 IronQR?

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

IronQR 的功能

对于使用二维码的开发人员来说,IronQR 是一款非常有用的工具,因为它拥有丰富的功能集。以下是它的几个突出特性:

QR 码生成

IronQR 可轻松创建 QR 代码。开发人员可以快速有效地从文本、URL 和其他类型的数据生成 QR 码。

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

QR 码读取

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

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

高级定制

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

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

批量处理

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

性能和效率

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

与 .NET 生态系统集成

IronQR 与 ASP.NET、Windows 窗体、WPF 和 Xamarin 应用程序以及其他 .NET 应用程序类型的整合非常简单,因为它能与 .NET 环境顺利整合。

.NET MAUI 应用程序入门

创建 C#.NET MAUI 应用程序需要安装 Visual Studio 2022 和 .NET 6 框架。然后,按以下步骤构建 .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 框架。在 Visual Studio 中选择好框架版本后,点击 "创建"。

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

安装 IronQR

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

Install-Package IronQR

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

构建 QR 码扫描器

创建用户界面是开发 QR 码扫描器的初始阶段。我们的基本用户界面将包括一个启动 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 后,在其中添加以下代码:

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#
  • OnScanButtonClicked":当用户点击 "扫描 QR 码 "按钮时,该方法将被调用。要使用设备的摄像头拍照并搜索二维码,则会调用 CaptureAndScanQrCode 函数。
  • CaptureAndScanQrCode`:该方法使用设备的摄像头拍照,然后使用 IronQR 从图片中读取二维码。

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

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

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

    • 图像源如果找到了二维码,二维码文本会显示在 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 和 .NET MAUI 一起提供了一个流畅的开发过程,让您可以专注于创建尖端功能和制作一流的应用程序。无论您是要创建一个简单的 QR 码扫描器,还是要创建一个具有尖端 QR 码功能的复杂应用程序,本教程都将为您的起步奠定坚实的基础。

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

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

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

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

免费NuGet下载 总下载量: 14,702 查看许可证 >