ライブ環境でテストする
ウォーターマークなしで本番環境でテストしてください。
必要な場所でいつでも動作します。
QRコードは、広告、小売、イベント管理などで頻繁に使用され、デジタルの世界でユビキタスになっている。 ASP.NETフレームワークで作業する開発者にとって、QRコードスキャン機能をWebアプリケーションに統合することで、ユーザーエクスペリエンスと機能性を高めることができます。 この記事では、ASP.NETアプリケーションにQRコードスキャナーを実装するプロセスについて、必要なツール、ライブラリ、ステップバイステップの実装について説明します。 以下を使用しますIronQRからQRコードを生成するための強力なライブラリです。Iron SoftwareQRコードを読み取る。
Visual Studioを使用してASP.NETプロジェクトを作成する
インストールIronQRパッケージマネージャからのライブラリ
QR画像をアップロードし、QRを読み取る。
QR(迅速な対応)コードは二次元バーコードで、URLから連絡先までさまざまな情報を格納することができ、通常はスマートフォンや専用のスキャン装置で読み取る。 ウェブアプリケーションでは、QRコードは次のようなさまざまな役割を果たすことができる:
IronQRは、QRコードの生成とスキャンのために設計された強力な.NETライブラリで、使いやすさを念頭に置いた堅牢な機能を提供します。 この多用途ライブラリはQRコードだけでなく、他の種類のバーコードも管理できるため、.NETエコシステム内で作業する開発者に好まれています。 ここでは、QR ライブラリをASP.NETアプリケーションに統合し、QRコードのスキャンを容易にする方法を探ります。
QRコードを読む:IronQRは、jpg、png、svg、bmp、gif、tif、tiffなどの様々な画像フォーマットからQRコードを読み取ることができます。 また、マルチページ画像やカスタムQR検出モデルもサポートしている。 出力データ形式には、テキスト、URL、座標などがある。
QRコードの作成:QRコードを生成し、画像として保存できます。(jpg、png、gif、tiff、bmp)また、既存のPDFにスタンプを押すこともできます。 テキスト、URL、バイト、数字などのデータをエンコードし、QRコードを生成します。 サイズ変更、余白の調整、再カラーリング、ロゴの追加など、QRコードのスタイリングをカスタマイズできます。
エラー処理と訂正:IronQRは、詳細なエラーメッセージとカスタムQRエラー訂正を提供します。 フォールトトレランスを確保し、ヌルチェックとチェックサムをサポートする。
高度な機械学習モデル:IronQRは、QRコード認識のための高度な機械学習モデルを使用しています。 このモデルは、モバイル、デスクトップ、クラウド環境を含む様々なプラットフォームにおいて、正確で信頼性の高いQRコード読み取りを保証します。
クロスプラットフォーム互換性:IronQRは、C#、F#、VB.NET用に設計されており、.NETコアのような様々な.NETバージョンで動作します。(8, 7, 6, 5, および3.1+).NET 標準(2.0以上).NET フレームワーク(4.6.2+)
これは、Webを含むさまざまなプロジェクトタイプをサポートしています。(Blazor & WebForms (ブレイザー & ウェブフォーム))モバイル(XamarinとMAUI)デスクトップ(WPF & MAUI)およびコンソールアプリケーション。
幅広いQRコードサポート:IronQRは様々なQRコードやその他のバーコードの取り扱いに優れています。 標準的なQRコード、マイクロQRコード、QRコードのバーコード画像、あるいはアステカやデータマトリックスのような特定のフォーマットを扱っているかどうかにかかわらず、IronQR対応しています。 IronQRはQRコードの読み取り機能もサポートしています。
IronQR.NET API製品には、オフィス文書、PDF編集、OCRなどのさまざまなツールが含まれています。
まず新規プロジェクトを作成し、以下のようにMVCテンプレートを選択します。
次に、プロジェクトの名前と場所を指定します。
.NET のバージョンを選択します。
作成ボタンをクリックすると、以下のコードとプロジェクトが作成されます。
インストールIronQRライブラリは、Visual Studio のパッケージ・マネージャーから以下のようにダウンロードします。
IronQRを使用してインストールすることもできる。NuGetパッケージマネージャー。
では、QRコードアプリを作ってみよう。
QrCode
モデルを作成using System.ComponentModel.DataAnnotations;
namespace IronQRScannerAsp.Models
{
public class QRCodeModel
{
[Display(Name = "Select QR Image")]
public IFormFile QRCodeImage
{
get;
set;
}
}
}
using System.ComponentModel.DataAnnotations;
namespace IronQRScannerAsp.Models
{
public class QRCodeModel
{
[Display(Name = "Select QR Image")]
public IFormFile QRCodeImage
{
get;
set;
}
}
}
Imports System.ComponentModel.DataAnnotations
Namespace IronQRScannerAsp.Models
Public Class QRCodeModel
<Display(Name := "Select QR Image")>
Public Property QRCodeImage() As IFormFile
End Class
End Namespace
新しいコントローラを追加するには、コントローラフォルダを右クリックし、以下のように名前を指定します:
空のコントローラを選択します。
コントローラ名を指定します。
次に、以下のコードをコントローラに追加する。
using IronQr;
using IronQRScannerAsp.Models;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;
namespace IronQRScannerAsp.Controllers
{
public class QrCodeController : Controller
{
private readonly IWebHostEnvironment _environment;
public QrCodeController(IWebHostEnvironment environment)
{
_environment = environment;
}
public IActionResult Index()
{
ViewBag.QrCodeText = "Text";
return View();
}
[HttpPost]
public IActionResult ScanQRCode(QRCodeModel qrImage)
{
string path = Path.Combine(_environment.WebRootPath, "ScanQRCode");
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
string filePath = Path.Combine(_environment.WebRootPath, "ScanQRCode/qrcode.png");
using (var stream = System.IO.File.Create(filePath))
{
qrImage.QRCodeImage.CopyTo(stream);
}
// Open the asset to read a QR Code from
var bitmap = AnyBitmap.FromFile(filePath);
// Load the asset into QrImageInput
QrImageInput imageInput = new QrImageInput(bitmap);
// Create a QR Reader object
QrReader reader = new QrReader();
// Read the Input an get all embedded QR Codes
IEnumerable<QrResult> results = reader.Read(imageInput);
ViewBag.QrCodeText = results.First().Value;
string imageUrl = $"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}" + "/ScanQRCode/qrcode.png";
ViewBag.QrCodeUri = imageUrl;
return View();
}
}
}
using IronQr;
using IronQRScannerAsp.Models;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;
namespace IronQRScannerAsp.Controllers
{
public class QrCodeController : Controller
{
private readonly IWebHostEnvironment _environment;
public QrCodeController(IWebHostEnvironment environment)
{
_environment = environment;
}
public IActionResult Index()
{
ViewBag.QrCodeText = "Text";
return View();
}
[HttpPost]
public IActionResult ScanQRCode(QRCodeModel qrImage)
{
string path = Path.Combine(_environment.WebRootPath, "ScanQRCode");
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
string filePath = Path.Combine(_environment.WebRootPath, "ScanQRCode/qrcode.png");
using (var stream = System.IO.File.Create(filePath))
{
qrImage.QRCodeImage.CopyTo(stream);
}
// Open the asset to read a QR Code from
var bitmap = AnyBitmap.FromFile(filePath);
// Load the asset into QrImageInput
QrImageInput imageInput = new QrImageInput(bitmap);
// Create a QR Reader object
QrReader reader = new QrReader();
// Read the Input an get all embedded QR Codes
IEnumerable<QrResult> results = reader.Read(imageInput);
ViewBag.QrCodeText = results.First().Value;
string imageUrl = $"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}" + "/ScanQRCode/qrcode.png";
ViewBag.QrCodeUri = imageUrl;
return View();
}
}
}
Imports IronQr
Imports IronQRScannerAsp.Models
Imports IronSoftware.Drawing
Imports Microsoft.AspNetCore.Mvc
Namespace IronQRScannerAsp.Controllers
Public Class QrCodeController
Inherits Controller
Private ReadOnly _environment As IWebHostEnvironment
Public Sub New(ByVal environment As IWebHostEnvironment)
_environment = environment
End Sub
Public Function Index() As IActionResult
ViewBag.QrCodeText = "Text"
Return View()
End Function
<HttpPost>
Public Function ScanQRCode(ByVal qrImage As QRCodeModel) As IActionResult
Dim path As String = System.IO.Path.Combine(_environment.WebRootPath, "ScanQRCode")
If Not Directory.Exists(path) Then
Directory.CreateDirectory(path)
End If
Dim filePath As String = System.IO.Path.Combine(_environment.WebRootPath, "ScanQRCode/qrcode.png")
Using stream = System.IO.File.Create(filePath)
qrImage.QRCodeImage.CopyTo(stream)
End Using
' Open the asset to read a QR Code from
Dim bitmap = AnyBitmap.FromFile(filePath)
' Load the asset into QrImageInput
Dim imageInput As New QrImageInput(bitmap)
' Create a QR Reader object
Dim reader As New QrReader()
' Read the Input an get all embedded QR Codes
Dim results As IEnumerable(Of QrResult) = reader.Read(imageInput)
ViewBag.QrCodeText = results.First().Value
Dim imageUrl As String = $"{Me.Request.Scheme}://{Me.Request.Host}{Me.Request.PathBase}" & "/ScanQRCode/qrcode.png"
ViewBag.QrCodeUri = imageUrl
Return View()
End Function
End Class
End Namespace
提供されるコードスニペットはQrCodeControllerという名前のASP.NET Core MVCコントローラのもので、IronQRライブラリを使用してQRコードスキャン機能を処理するように設計されています。 このコードが何をするのかを簡単に説明しよう:
ファイルパスを構築する(パス)アプリケーションのウェブルートディレクトリ内にQRコード画像を保存します。(「ScanQRCode」ディレクトリ).
このディレクトリが存在するかどうかをチェックし、存在しない場合はファイルを保存する際にファイルが見つからないというエラーを避けるために作成する。
ファイルのフルパスを構築する(ファイルパス)アップロードされたQRコード画像が保存される場所("ScanQRCode/qrcode.png"). これは、同じ名前の既存のファイルを上書きし、ファイルを蓄積することなく効果的に新しいスキャンを処理する。
ファイルストリームを開き、アップロードされた画像の内容をコピーする。(qrImage.QRCodeImage`、おそらくフォームファイル)をサーバー上の指定された場所にコピーする。
AnyBitmap.FromFileを利用する。(ファイルパス)保存された画像ファイルをQRコードスキャンに適した形式にロードします。 AnyBitmap`は、画像ファイルをQRリーダーが処理できるビットマップオブジェクトに変換するためのヘルパークラスであると思われる。
読み込んだビットマップを QrImageInput
にラップする。この QrImageInput
は特に QR コード読み取り処理の入力として設計されている。 QRコードを検出してデコードするためのIronQR ライブラリのコンポーネントである QrReader
をインスタンス化する。
reader.Readを呼び出す(画像入力)QRコード用の画像をスキャンする。 このメソッドは IEnumerable<QrResult>ここで、各
QrResultは画像内の検出されたQRコードのデータを含んでいる。 results.Firstを使って最初の結果の値を取り出す。().Value
でデコードし、このデコード情報を ViewBag.QrCodeText
に格納する。 これは、画像に少なくとも1つのQRコードが含まれていることを前提としており、QRコードが検出されない潜在的なエラーは処理されません。
URLを構築する(imageUrl
)サーバーに保存されたQRコード画像を指します。 このURLは、現在のHTTPリクエストのスキーム、ホスト、およびパスのベースを使用して構築され、ユーザーが閲覧できることを保証します。 構築されたURLはViewBag.QrCodeUri
に保存される。
同じビューを返す(表示()もちろん、英語のテキストを教えていただけますでしょうか?)QRコード画像とデコードされたテキストの両方をユーザーに表示する可能性が高い。 ViewBag`は、QRコードをデコードしたテキストと画像のURLをビューに渡してレンダリングするために使用する。
新しいビューを追加し、QrCodeController
クラスの CreateQRCode
アクションメソッドを右クリックします。
Add View "を選択し、"Razor View "を選択する。 追加」をクリックする。
次に、"Create "テンプレートと以前に生成されたModelクラスを選択します。
次に、ビュー・クラスのコードを以下のコードに置き換える。
@model IronQRScannerAsp.Models.QRCodeModel
@{
ViewData["Title"] = "ScanQRCode";
}
<h1>ScanQRCode</h1>
<h4>QRCodeModel</h4>
<hr />
<div class="row">
<div class="col-md-14">
<form asp-action="ScanQRCode" enctype="multipart/form-data">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
</div>
<div class="form-group">
<h3>Scanned Text:</h3>
<h4>@ViewBag.QrCodeText</h4>
</div>
<div class="form-group">
<img src="@ViewBag.QrCodeUri" class="img-thumbnail" />
</div>
</form>
</div>
</div>
<div>
<a asp-action="Index">Clear</a>
</div>
@section Scripts {
@{
await Html.RenderPartialAsync("_ValidationScriptsPartial");
}
}
@model IronQRScannerAsp.Models.QRCodeModel
@{
ViewData["Title"] = "ScanQRCode";
}
<h1>ScanQRCode</h1>
<h4>QRCodeModel</h4>
<hr />
<div class="row">
<div class="col-md-14">
<form asp-action="ScanQRCode" enctype="multipart/form-data">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
</div>
<div class="form-group">
<h3>Scanned Text:</h3>
<h4>@ViewBag.QrCodeText</h4>
</div>
<div class="form-group">
<img src="@ViewBag.QrCodeUri" class="img-thumbnail" />
</div>
</form>
</div>
</div>
<div>
<a asp-action="Index">Clear</a>
</div>
@section Scripts {
@{
await Html.RenderPartialAsync("_ValidationScriptsPartial");
}
}
model ReadOnly Property () As IronQRScannerAsp.Models.QRCodeModel
ViewData("Title") = "ScanQRCode"
End Property
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <h1> ScanQRCode</h1> <h4> QRCodeModel</h4> <hr /> <div class="row"> <div class="col-md-14"> <form asp-action="ScanQRCode" enctype="multipart/form-data"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> </div> <div class="form-group"> <h3> Scanned Text:</h3> <h4> @ViewBag.QrCodeText</h4> </div> <div class="form-group"> <img src="@ViewBag.QrCodeUri" class="img-thumbnail" /> </div> </form> </div> </div> <div> <a asp-action="Index"> Clear</a> </div> @section Scripts
"form-group"> </div> <div class="form-group"> (Of h3) Scanned Text
Inherits </h3>(Of h4) ViewBag.QrCodeText</h4> </div> <div class="form-group"> <img src="@ViewBag.QrCodeUri" class="img-thumbnail" /> </div> </form> </div> </div> (Of div) <a asp-action="Index"> Clear</a> </div> section Scripts
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Friend <h1> ScanQRCode</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-14"> <form asp-action="ScanQRCode" enctype="multipart/form-data"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> </div> <div class
"text-danger"></div> <div class="form-group"> </div> <div class
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Friend <h1> ScanQRCode</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-14"> <form asp-action="ScanQRCode" enctype="multipart/form-data"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class
"ModelOnly" class="text-danger"></div> <div class
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Friend <h1> ScanQRCode</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-14"> <form asp-action="ScanQRCode" enctype="multipart/form-data"> <div asp-validation-summary="ModelOnly" class
"multipart/form-data"> <div asp-validation-summary="ModelOnly" class
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Friend <h1> ScanQRCode</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-14"> <form asp-action="ScanQRCode" enctype="multipart/form-data"> <div asp-validation-summary
"ScanQRCode" enctype="multipart/form-data"> <div asp-validation-summary
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Private Friend <h1> ScanQRCode</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-14"> <form asp-action="ScanQRCode" enctype
"col-md-14"> <form asp-action="ScanQRCode" enctype
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Private Private Friend <h1> ScanQRCode</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-14"> <form asp-action
"row"> <div class="col-md-14"> <form asp-action
'INSTANT VB WARNING: Instant VB cannot determine whether both operands of this division are integer types - if they are then you should use the VB integer division operator:
Private Private Private Private Private Private Private Friend (Of h1) ScanQRCode</h1> (Of h4) QRCodeModel</h4> <hr /> <div Class="row"> <div class
@
If True Then
Await Html.RenderPartialAsync("_ValidationScriptsPartial")
End If
End Class
ここで、program.csの以下のコードを変更して、上記のビューをデフォルトのルートにします。
app.MapControllerRoute(
name: "default",
pattern: "{controller=QrCode}/{action=Index}");
app.MapControllerRoute(
name: "default",
pattern: "{controller=QrCode}/{action=Index}");
app.MapControllerRoute(name:= "default", pattern:= "{controller=QrCode}/{action=Index}")
これは、デフォルトのルートを HomeController
から QrCode
コントローラに変更します。
URLを入力します:https://ironsoftware.com/csharp/qr.
ページでQRコード画像を選択し、アップロードをクリックしてQRコードをデコードします。 このアプリは、ビデオフィードから読み取って結果を表示するように変更することもできる。
高度なQRコードを読み取るために、IronQRは以下の設定を提供します。
using IronQr;
using IronSoftware.Drawing;
using IronQr.Enum;
using System.Collections.Generic;
var inputBmp = AnyBitmap.FromFile("QrImage.png");
// Use Auto => Machine Learning Scan
// Careful Scan => Useful for scanning documents slowly and carefully
QrImageInput scan_ML_and_normal = new QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> results1 = new QrReader().Read(scan_ML_and_normal);
// Use Machine Learning Scan
// High Speed => For scanning frames from a camera
QrImageInput scan_ML_only = new QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> results2 = new QrReader().Read(scan_ML_only);
// Use Scan without Machine Learning
QrImageInput scan_normal_only = new QrImageInput(inputBmp, QrScanMode.OnlyBasicScan);
IEnumerable<QrResult> results3 = new QrReader().Read(scan_normal_only);
using IronQr;
using IronSoftware.Drawing;
using IronQr.Enum;
using System.Collections.Generic;
var inputBmp = AnyBitmap.FromFile("QrImage.png");
// Use Auto => Machine Learning Scan
// Careful Scan => Useful for scanning documents slowly and carefully
QrImageInput scan_ML_and_normal = new QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> results1 = new QrReader().Read(scan_ML_and_normal);
// Use Machine Learning Scan
// High Speed => For scanning frames from a camera
QrImageInput scan_ML_only = new QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> results2 = new QrReader().Read(scan_ML_only);
// Use Scan without Machine Learning
QrImageInput scan_normal_only = new QrImageInput(inputBmp, QrScanMode.OnlyBasicScan);
IEnumerable<QrResult> results3 = new QrReader().Read(scan_normal_only);
Imports IronQr
Imports IronSoftware.Drawing
Imports IronQr.Enum
Imports System.Collections.Generic
Private inputBmp = AnyBitmap.FromFile("QrImage.png")
' Use Auto => Machine Learning Scan
' Careful Scan => Useful for scanning documents slowly and carefully
Private scan_ML_and_normal As New QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel)
Private results1 As IEnumerable(Of QrResult) = (New QrReader()).Read(scan_ML_and_normal)
' Use Machine Learning Scan
' High Speed => For scanning frames from a camera
Private scan_ML_only As New QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel)
Private results2 As IEnumerable(Of QrResult) = (New QrReader()).Read(scan_ML_only)
' Use Scan without Machine Learning
Private scan_normal_only As New QrImageInput(inputBmp, QrScanMode.OnlyBasicScan)
Private results3 As IEnumerable(Of QrResult) = (New QrReader()).Read(scan_normal_only)
最新のMLテクノロジーを活用することで、私たちはQRコードリーダーを新たな高みへと昇華させました。 洗練されたMLモデルは、複雑な条件下でもQRコードを解読するアプリケーションの精度と効率を高める。 静止画像、ビデオストリーム、ライブカメラフィードのいずれからQRコードを読み取ろうとも、MLを搭載したソリューションは必要な情報を迅速かつ確実に提供する。 この技術革新はデータ検索を合理化し、本物のQRコードを識別して潜在的な脅威にフラグを立てることでセキュリティを強化する。 当社のMLテクノロジーにより、QRコードのスキャン機能が最先端であることを確信し、ユーザーにスムーズで安全な体験を提供することができます。
開発者は以下からIronQR のトライアルライセンスを入手できます。これ. キーはappSettings.jsonに記述する必要がある。
{
"IronQR.License.LicenseKey": "My key"
}
この記事では、ASP.NET CoreでQRコードをスキャンする方法について、次のように説明した。IronQR. 統合するIronQRQRコードスキャン用のASP.NETアプリケーションへの変換は、Webアプリケーションの機能を強化し、よりインタラクティブでユーザーフレンドリーにする簡単なプロセスです。 IronQRの強力な機能と使いやすさは、バーコード関連の機能を実装しようとしている開発者にとって素晴らしい選択肢となる。
9つの .NET API製品 オフィス文書用