Blazor ile IronBarcode Kullanımı
Bu nasıl yapılır makalesi, IronBarcode'u Blazor projesine nasıl entegre edeceğiniz konusunda ayrıntılı talimatlar içerir. Örnek olarak, bir kullanıcının web kamerasından alınan çubuk kodları/QR'leri taramak için Blazor uygulamasında IronBarcode kullanacağız.
Blazor'da Barkod Tarayıcı Nasıl Kullanılır?
- Blazor'da barkod taramak için C# kütüphanesi yükleyin
- Bir Blazor sunucu projesi oluşturun ve yeni bir Razor bileşeni ekleyin
- Web kamerasını JavaScript kullanarak etkinleştirin
- görüntü yakalama yöntemini görüntüleri sunucuya gönderecek şekilde yapılandırın
- Barkodları BarcodeReader.Read yöntemi ile çözün
Blazor Projesi Oluşturun
Visual Studio'yu Açın => Yeni Proje Oluştur => Blazor Sunucu Uygulaması:

Bir proje adı ve konum ayarlayın:

.NET 6 çerçevesini (veya başka bir modern Standart .NET sürümünü) seçin:

Ve hazırız:

Web kamerası desteği eklemek için yeni bir Razor bileşeni ekleyin:

Bir isim verin, ardından Ekle'ye tıklayın:

JavaScript ile Web Kamerası Fonksiyonelliğini Etkinleştir
Bu uygulama bir kullanıcının web kamerası ile çalıştığı için gizlilik açısından istemci tarafında işleme yapmalı. Web kamerası işlevini yönetmek için projeye bir JavaScript dosyası ekleyin ve dosyaya webcam.js adını verin:

webcam.js'ye index.html'de bir referans eklemeyi unutmayın:
<script src="webcam.js"></script>
<script src="webcam.js"></script>
Aşağıdaki kodu webcam.js'ye ekleyin:
// Current video stream
let videoStream;
// Function to initialize camera access and stream it to a video element
async function initializeCamera() {
const canvas = document.querySelector("#canvas");
const video = document.querySelector("#video");
// Check if navigator supports media devices
if (!("mediaDevices" in navigator) || !("getUserMedia" in navigator.mediaDevices)) {
alert("Camera API is not available in your browser");
return;
}
// Define video constraints
const constraints = {
video: {
width: { min: 180 },
height: { min: 120 }
},
};
// Set camera facing mode: "user" for front camera, "environment" for back camera
constraints.video.facingMode = useFrontCamera ? "user" : "environment";
try {
// Request camera access
videoStream = await navigator.mediaDevices.getUserMedia(constraints);
video.srcObject = videoStream;
} catch (err) {
alert("Could not access the camera: " + err);
}
}
// Current video stream
let videoStream;
// Function to initialize camera access and stream it to a video element
async function initializeCamera() {
const canvas = document.querySelector("#canvas");
const video = document.querySelector("#video");
// Check if navigator supports media devices
if (!("mediaDevices" in navigator) || !("getUserMedia" in navigator.mediaDevices)) {
alert("Camera API is not available in your browser");
return;
}
// Define video constraints
const constraints = {
video: {
width: { min: 180 },
height: { min: 120 }
},
};
// Set camera facing mode: "user" for front camera, "environment" for back camera
constraints.video.facingMode = useFrontCamera ? "user" : "environment";
try {
// Request camera access
videoStream = await navigator.mediaDevices.getUserMedia(constraints);
video.srcObject = videoStream;
} catch (err) {
alert("Could not access the camera: " + err);
}
}
Kullanıcının web kamerasını açmamız gerekiyor. Sayfa yüklendiğinde OnInitializedAsync() yöntemini Index.razor ile geçersiz kılıp bunu yapın. Daha önce yazdığınız JavaScript initializeCamera() işlevini çağırın.
protected override async Task OnInitializedAsync()
{
await JSRuntime.InvokeVoidAsync("initializeCamera");
}
protected override async Task OnInitializedAsync()
{
await JSRuntime.InvokeVoidAsync("initializeCamera");
}
Protected Overrides Async Function OnInitializedAsync() As Task
Await JSRuntime.InvokeVoidAsync("initializeCamera")
End Function
Artık web kamerası video akışını çalıştıracak HTML etiketleri ekleyin:
<section class="section">
<video autoplay id="video" width="320"></video>
</section>
<section class="section">
<video autoplay id="video" width="320"></video>
</section>
Görüntüyü Yakalama
Web kamerası video akışından bir kare yakalamak için, webcam.js içinde başka bir JavaScript işlevi yazalım. Bu işlev, kaynak videodan tuval hedefe mevcut çerçeveyi çizecektir.
// Function to capture a frame from the video and send it to the server via Blazor
function getFrame(dotNetHelper) {
// Set canvas dimensions to match video
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
// Draw the current video frame onto the canvas
canvas.getContext('2d').drawImage(video, 0, 0);
// Convert the canvas content to a base64 encoded PNG image
let dataUrl = canvas.toDataURL("image/png");
// Send the image data to the C# method `ProcessImage`
dotNetHelper.invokeMethodAsync('ProcessImage', dataUrl);
}
// Function to capture a frame from the video and send it to the server via Blazor
function getFrame(dotNetHelper) {
// Set canvas dimensions to match video
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
// Draw the current video frame onto the canvas
canvas.getContext('2d').drawImage(video, 0, 0);
// Convert the canvas content to a base64 encoded PNG image
let dataUrl = canvas.toDataURL("image/png");
// Send the image data to the C# method `ProcessImage`
dotNetHelper.invokeMethodAsync('ProcessImage', dataUrl);
}
Bu işlev bir kareyi yakalar, base64'e kodlar ve ardından kodlanmış görüntüyü C#'da ProcessImage() adlı bir yönteme gönderir. ProcessImage() yöntemi şöyledir: kodlanmış görüntüyü işlemek üzere sunucu tarafındaki bir API'ye gönderir.
[JSInvokable]
public async Task ProcessImage(string imageString)
{
// Create an image object containing the base64 data
var imageObject = new CamImage();
imageObject.imageDataBase64 = imageString;
// Serialize image object to JSON
var jsonObj = System.Text.Json.JsonSerializer.Serialize(imageObject);
// Send image data to server-side API for processing
var barcodeeResult = await Http.PostAsJsonAsync("Ironsoftware/ReadBarCode", imageObject);
if (barcodeeResult.StatusCode == System.Net.HttpStatusCode.OK)
{
QRCodeResult = await barcodeeResult.Content.ReadAsStringAsync();
StateHasChanged();
}
}
[JSInvokable]
public async Task ProcessImage(string imageString)
{
// Create an image object containing the base64 data
var imageObject = new CamImage();
imageObject.imageDataBase64 = imageString;
// Serialize image object to JSON
var jsonObj = System.Text.Json.JsonSerializer.Serialize(imageObject);
// Send image data to server-side API for processing
var barcodeeResult = await Http.PostAsJsonAsync("Ironsoftware/ReadBarCode", imageObject);
if (barcodeeResult.StatusCode == System.Net.HttpStatusCode.OK)
{
QRCodeResult = await barcodeeResult.Content.ReadAsStringAsync();
StateHasChanged();
}
}
<JSInvokable>
Public Async Function ProcessImage(ByVal imageString As String) As Task
' Create an image object containing the base64 data
Dim imageObject = New CamImage()
imageObject.imageDataBase64 = imageString
' Serialize image object to JSON
Dim jsonObj = System.Text.Json.JsonSerializer.Serialize(imageObject)
' Send image data to server-side API for processing
Dim barcodeeResult = Await Http.PostAsJsonAsync("Ironsoftware/ReadBarCode", imageObject)
If barcodeeResult.StatusCode = System.Net.HttpStatusCode.OK Then
QRCodeResult = Await barcodeeResult.Content.ReadAsStringAsync()
StateHasChanged()
End If
End Function
JavaScript'teki getFrame()'den kodlanmış görüntüyü işlenmek üzere sunucu tarafı API'ye gönderir.
Sıradaki, Çerçeveyi Yakala düğmesine tıklandığında bu JavaScript işlevini çağırmamız gerekiyor. Unutmayın, düğmemiz CaptureFrame adlı bir işleyici işlevi arıyor.
private async Task CaptureFrame()
{
await JSRuntime.InvokeAsync<String>("getFrame", DotNetObjectReference.Create(this));
}
private async Task CaptureFrame()
{
await JSRuntime.InvokeAsync<String>("getFrame", DotNetObjectReference.Create(this));
}
Private Async Function CaptureFrame() As Task
Await JSRuntime.InvokeAsync(Of String)("getFrame", DotNetObjectReference.Create(Me))
End Function
IronBarcode Yakalanan Görüntüyü Çıkartıyor
Sunucu projesine IronBarcode NuGet paketini ekleyin:
dotnet add package IronBarCode
Şimdi, sunucu projesinde, kodlanmış görüntüyü işlemek ve Barkod/QR değerini çıkarmak için bir API metodu ekleyin. Aşağıdaki kod, Blazor projesine barkod okuma işlevselliği ekler. Taranan görüntüden görüntü ön işleme gerçekleştirir ve bunu FromStream yöntemine aktarırız. Blazor'da BARCODE'u taramak için Image nesnesini BarcodeReader sınıfındaki bir yönteme aktarın. Elde edilen barkod değeri daha sonra BarcodeResult nesnesinin Değer özelliğinden erişilebilir olur.
[HttpPost]
[Route("ReadBarCode")]
public string ReadBarCode(CamImage imageData)
{
try
{
// Decode the base64 image data
var splitObject = imageData.imageDataBase64.Split(',');
byte[] imagebyteData = Convert.FromBase64String((splitObject.Length > 1) ? splitObject[1] : splitObject[0]);
// Set IronBarcode license key (replace 'Key' with actual key)
IronBarCode.License.LicenseKey = "Key";
using (var ms = new MemoryStream(imagebyteData))
{
// Convert byte array to Image
Image barcodeImage = Image.FromStream(ms);
// Read barcode from Image
var result = BarcodeReader.Read(barcodeImage);
if (result == null || result.Value == null)
{
return $"{DateTime.Now}: Barcode is Not Detected";
}
return $"{DateTime.Now}: Barcode is ({result.Value})";
}
}
catch (Exception ex)
{
return $"Exception: {ex.Message}";
}
}
// Model to encapsulate the base64 image data
public class CamImage
{
public string imageDataBase64 { get; set; }
}
[HttpPost]
[Route("ReadBarCode")]
public string ReadBarCode(CamImage imageData)
{
try
{
// Decode the base64 image data
var splitObject = imageData.imageDataBase64.Split(',');
byte[] imagebyteData = Convert.FromBase64String((splitObject.Length > 1) ? splitObject[1] : splitObject[0]);
// Set IronBarcode license key (replace 'Key' with actual key)
IronBarCode.License.LicenseKey = "Key";
using (var ms = new MemoryStream(imagebyteData))
{
// Convert byte array to Image
Image barcodeImage = Image.FromStream(ms);
// Read barcode from Image
var result = BarcodeReader.Read(barcodeImage);
if (result == null || result.Value == null)
{
return $"{DateTime.Now}: Barcode is Not Detected";
}
return $"{DateTime.Now}: Barcode is ({result.Value})";
}
}
catch (Exception ex)
{
return $"Exception: {ex.Message}";
}
}
// Model to encapsulate the base64 image data
public class CamImage
{
public string imageDataBase64 { get; set; }
}
<HttpPost>
<Route("ReadBarCode")>
Public Function ReadBarCode(ByVal imageData As CamImage) As String
Try
' Decode the base64 image data
Dim splitObject = imageData.imageDataBase64.Split(","c)
Dim imagebyteData() As Byte = Convert.FromBase64String(If(splitObject.Length > 1, splitObject(1), splitObject(0)))
' Set IronBarcode license key (replace 'Key' with actual key)
IronBarCode.License.LicenseKey = "Key"
Using ms = New MemoryStream(imagebyteData)
' Convert byte array to Image
Dim barcodeImage As Image = Image.FromStream(ms)
' Read barcode from Image
Dim result = BarcodeReader.Read(barcodeImage)
If result Is Nothing OrElse result.Value Is Nothing Then
Return $"{DateTime.Now}: Barcode is Not Detected"
End If
Return $"{DateTime.Now}: Barcode is ({result.Value})"
End Using
Catch ex As Exception
Return $"Exception: {ex.Message}"
End Try
End Function
' Model to encapsulate the base64 image data
Public Class CamImage
Public Property imageDataBase64() As String
End Class
Örnek projeyi burada bulabilirsiniz.
Sıkça Sorulan Sorular
Blazor projesine nasıl bir barkod kütüphanesi entegre edebilirim?
Blazor projesine bir barkod kütüphanesi entegre etmek için uygun NuGet paketini kurun, bir Blazor sunucu projesi oluşturun, JavaScript ile webcam desteği ekleyin, görüntüleri yakalayın ve kütüphanenin barkod okuma yöntemleriyle çözümleyin.
Blazor uygulamasında webcam desteğini nasıl etkinleştiririm?
Blazor projenize bir JavaScript dosyası ekleyerek webcam desteğini etkinleştirin. Dosya, webcam video akışını erişim ve akışı sağlamak için işlevler içermeli ve Blazor'dan JS interop ile çağrılabilmelidir.
Webcam'e erişmek için hangi JavaScript gerekli?
JavaScript, navigator.mediaDevices.getUserMedia kullanarak kamera erişimi talep eden ve videoyu bir HTML video öğesine aktaran bir initializeCamera() işlevi içermelidir.
Blazor'da webcam'den bir kareyi nasıl yakalar ve işlerim?
Mevcut video karesini yakalayıp base64 kodlu bir resme dönüştüren ve Blazor'un JS interop'u kullanarak bir C# metoduna gönderen bir JavaScript işlevi yazın. C# metodu daha sonra barkod okuma için resmi işleyebilir.
Blazor projesinde barkodları nasıl okuyabilirim?
Bir sunucu tarafı API metodunda, bir base64 görüntü dizesini çözümleyerek bir barkod kütüphanesi okuma sınıfını kullanarak barkod değerini resimden çıkartabilirsiniz.
Blazor'da bir barkod kütüphanesi kullanmak için ön koşullar nelerdir?
Bir Blazor sunucu projesine sahip olduğunuzdan, gerekli NuGet paketinin kurulu olduğundan ve JavaScript'in webcam girdisini yönetmek için yapılandırıldığından emin olun. Ayrıca barkod kütüphanesi için geçerli bir lisans anahtarına ihtiyacınız var.
Blazor'da yakalanan görüntüleri nasıl sunucuya gönderebilirim?
JavaScript'te DotNetObjectReference kullanarak bir C# metodunu, base64 görüntü dizisi ile metod çağıran görüntü verileriyle sunucuya göndermek için çağırın.
Bu barkod kütüphanesi QR kodlarını yönetebilir mi?
Evet, barkod kütüphanesi Blazor ile yapılanlar da dahil olmak üzere .NET uygulamaları içinde hem barkodları hem de QR kodlarını oluşturup, okuyup, yönetebilir.
Bir barkod kütüphanesi kullanan örnek bir Blazor projesini nerede bulabilirim?
Makalede verilen bağlantıya makalenin sonuç bölümünde erişilebilir ve indirilebilir örnek bir Blazor projesi bulunmaktadır.
IronBarcode, barkodların toplu işlenmesini destekliyor mu?
Evet, IronBarcode toplu işlemeyi destekler, bu da geliştiricilerin büyük ölçekli uygulamalar için verimliliği artırarak tek bir işlemde birden fazla barkod oluşturmasını veya okumasını sağlar.

