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ı. Projeye, web kamerası işlevselliğini yönetmek için bir JavaScript dosyası ekleyin ve bu dosyayı webcam.js olarak adlandırın:

webcam.js'e dair bir referansı index.html içinde dahil etmeyi 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 bunu gerçekleştirmek için Index.razor'in OnInitializedAsync() yöntemini geçersiz kılarak bunu yapın. Daha önce yazdığınız JavaScript initializeCamera() fonksiyonunu ç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 kameradan gelen video akışından bir kare yakalamak için webcam.js içinde başka bir JavaScript fonksiyonu 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 fonksiyon bir kareyi yakalayacak, base64'e kodlayacak, sonra kodlanmış görüntüyü ProcessImage() adlı C# metoduna gönderecek. ProcessImage() metodu şudur: kodlanmış görüntüyü işlemesi için sunucu taraflı 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
Bu, JavaScript içinde getFrame()'dan kodlanmış görüntüyü sunucu taraflı bir API'ye işlenmesi için gönderir.
Sıradaki, Çerçeveyi Yakala düğmesine tıklandığında bu JavaScript işlevini çağırmamız gerekiyor. Unutmayın, butonumuz CaptureFrame adlı bir işlemci fonksiyonu 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. Tarayıcıdan alınan görüntüden, görüntü ön işlemesi yapıyoruz ve bunu FromStream metoduna besliyoruz. Resim nesnesini BarcodeReader sınıfındaki bir metoda geçirerek Blazor'da barkodu tarayı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](/static-assets/barcode/faq/blazor/Blazor IronBarcodeWithCAM.zip) 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.

