IronBarcode'u Blazor ile Kullanma
Bu nasıl yapılır makalesi, IronBarcode'u bir Blazor projesine entegre etmek için ayrıntılı talimatlar içerir. Örnek olarak, bir kullanıcının web kamerasından yakalanan barkodları/QR'leri taramak için bir Blazor uygulamasında IronBarcode kullanacağız.
Blazor'da Barkod Tarayıcı Kullanma
- Blazor'da barkod taramak için C# kütüphanesini yükleyin
- Bir Blazor sunucu projesi oluşturun ve yeni bir Razor bileşeni ekleyin
- JavaScript kullanarak web kamerasını etkinleştirin
- Görüntü yakalama yöntemini sunucuya gönderilecek şekilde yapılandırın
- BarcodeReader.Read metodunu kullanarak barkodları çözün
Blazor Projesi Oluşturun
Visual Studio'yu açın => Yeni Proje Oluştur => Blazor Server Uygulaması:

Bir proje adı ve konumu belirleyin:

Modern bir Standart .NET sürümü (örneğin, .NET 6) 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ı İşlevselliğini Etkinleştirin
Bu uygulama bir kullanıcının web kamerasıyla çalıştığı için, gizlilik için işlemeyi istemci tarafında yapmalıdır. Projeye bir JavaScript dosyası ekleyin, webcam işlevselliğini yönetmek için ve adını webcam.js olarak belirleyin:

webcam.js bir referans eklemeyi index.html içinde unutmayın:
<script src="webcam.js"></script>
<script src="webcam.js"></script>
Aşağıdaki kodu webcam.js 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 yaparak Index.razor metodunu geçersiz kılın OnInitializedAsync(). 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
Şimdi, web kamerası video akışını çalıştıracak HTML etiketlerini 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ü Yakala
Webcam video akışından bir kare yakalamak için, webcam.js içine başka bir JavaScript fonksiyonu yazalım. Bu fonksiyon, kaynak videodan mevcut kareyi tuval hedefine çizecek.
// 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 kare yakalayacak, base64'e kodlayacak, ardından kodlanmış resmi ProcessImage() adlı C# metoduna gönderecek. ProcessImage() metodu şu şekildedir: kodlanmış görüntüyü işlemek için sunucu tarafı 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
getFrame() içindeki kodlanmış resmi JavaScript'den sunucu tarafı bir API'ye göndermekle başa çıkar.
Sonra, Çerçeve Yakala düğmesine tıklandığında bu JavaScript fonksiyonunu çağırmamız gerekiyor. Unutmayın, butonumuz CaptureFrame adlı bir işleyici fonksiyon 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ü Çıkartma
Sunucu projesine IronBarcode NuGet paketini ekleyin:
dotnet add package IronBarCode
Şimdi, sunucu projesinde kodlanmış resmi işlemek ve Barkod/QR değerini çıkarmak için bir API yöntemi ekleyin. Aşağıdaki kod, Blazor projesine barkod okuma işlevselliği ekler. Tarama yapılan görüntüden, görüntü ön-işleme yaparız ve FromStream metoduna besleriz. Image nesnesini, Blazor'da barkodu taramak için BarcodeReader sınıfındaki bir metoda aktarın. Sonuçta elde edilen barkod değeri daha sonra BarcodeResult nesnesinin Değer özelliğinden erişilebilir.
[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 buradan bulabilirsiniz.
Sıkça Sorulan Sorular
Blazor projesinde bir barkod kütüphanesi nasıl entegre edilir?
Uygun NuGet paketini kurarak, bir Blazor sunucu projesi ayarlayarak, JavaScript ile webcam desteğini etkinleştirerek, görüntüleri yakalayarak ve kütüphanenin barkod okuma yöntemlerini kullanarak bir barkod kütüphanesini Blazor projesine entegre edin.
Blazor uygulamasında webcam desteğini nasıl sağlarım?
Blazor projenize bir JavaScript dosyası ekleyerek webcam desteğini etkinleştirin. Dosya, webcam videosunu erişmek ve akışını sağlamak için işlevler içermelidir ve Blazor'dan JS interop kullanılarak çağrılabilir.
Web kameraya erişim sağlamak için gerekli JavaScript nedir?
JavaScript, navigator.mediaDevices.getUserMedia kullanarak kamera erişimi talep eden ve videoyu bir HTML video elementine aktaran initializeCamera() gibi bir fonksiyon içermelidir.
Blazor'da web kameradan bir kareyi nasıl yakalar ve işlerim?
Mevcut video karesini yakalayan, onu base64 kodlu bir görüntüye dönüştüren ve Blazor'un JS interop'u kullanarak bir C# metoduna gönderen bir JavaScript fonksiyonu yazın. Daha sonra C# metodu, görüntüyü barkod okuma için işleyebilir.
Blazor projesinde barkodları nasıl okuyabilirim?
Bir sunucu tarafı API metodunda base64 görüntü dizesini çözüp, barkod kütüphanesinin okuyucu sınıfını kullanarak görüntüden barkod bilgisini okutarak barkodları okuyabilirsiniz.
Blazor'da bir barkod kütüphanesi kullanmak için ön koşullar nelerdir?
Blazor sunucu projesinin kurulu olduğundan, gerekli NuGet paketinin yüklendiğinden ve web kamerası girişini işlemek için JavaScript'in yapılandırıldığından emin olun. Ayrıca barkod kütüphanesi için geçerli bir lisans anahtarı da gereklidir.
Blazor'da yakalanan görüntüleri sunucuya nasıl gönderirim?
JavaScript'te DotNetObjectReference kullanarak base64 görüntü dizesi ile metodu çağırarak yakalanmış görüntüleri sunucuya bir C# metoduyla gönderin.
Bu barkod kütüphanesi QR kodlarını işleyebilir mi?
Evet, barkod kütüphanesi .NET uygulamaları, Blazor dahil, içerisinde barkod ve QR kodları oluşturabilir, okuyabilir ve yönetebilir.
Barkod kütüphanesini kullanan örnek bir Blazor projesini nerede bulabilirim?
Makalenin sonucunda verilen bağlantıdan indirilebilecek örnek bir Blazor projesi vardır.

