Blazor'da Barcode Tarayıcı Nasıl Kullanılır | IronBarcode

Blazor ile IronBarcode Kullanımı

This article was translated from English: Does it need improvement?
Translated
View the article in English

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 Projesi Oluşturun

Visual Studio'yu Açın => Yeni Proje Oluştur => Blazor Sunucu Uygulaması:

CreateBlazorProject related to Blazor Projesi Oluşturun

Bir proje adı ve konum ayarlayın:

ProjectName related to Blazor Projesi Oluşturun

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

SelectFramework related to Blazor Projesi Oluşturun

Ve hazırız:

MainScreen related to Blazor Projesi Oluşturun

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

NewRazorComponent related to Blazor Projesi Oluşturun

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

NewRazorComponentName related to Blazor Projesi Oluşturun

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:

JavascriptFileLocation related to JavaScript ile Web Kamerası Fonksiyonelliğini Etkinleştir

webcam.js'ye index.html'de bir referans eklemeyi unutmayın:

<script src="webcam.js"></script>
<script src="webcam.js"></script>
HTML

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);
    }
}
JAVASCRIPT

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
$vbLabelText   $csharpLabel

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>
HTML

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);
}
JAVASCRIPT

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

Ö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.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku
Başlamaya Hazır mısınız?
Nuget İndirmeler 2,240,258 | Sürüm: 2026.5 just released
Still Scrolling Icon

Hâlâ Kaydırıyor Musunuz?

Hızlıca kanıt ister misiniz? PM > Install-Package BarCode
bir örnek çalıştır dizginizin barkoda dönüştüğünü izle.