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

IronBarcode'u Blazor ile Kullanma

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

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

CreateBlazorProject related to Blazor Projesi Oluşturun

Bir proje adı ve konumu belirleyin:

ProjectName related to Blazor Projesi Oluşturun

Modern bir Standart .NET sürümü (örneğin, .NET 6) 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ı İş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:

JavascriptFileLocation related to JavaScript ile Web Kamerası İşlevselliğini Etkinleştirin

webcam.js bir referans eklemeyi index.html içinde unutmayın:

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

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

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

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

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

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

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

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

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

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında lisans derecesine sahiptir (Carleton Üniversitesi) ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirme üzerine uzmanlaşmıştır. Kullanıcı dostu ve estetik açıdan hoş arayüzler tasarlamaya tutkuyla bağlı olan Curtis, modern çerç...

Daha Fazlasını Oku
Başlamaya Hazır mısınız?
Nuget İndirmeler 2,169,908 | Sürüm: 2026.4 just released
Still Scrolling Icon

Hala Kaydiriyor musunuz?

Hızlı bir kanit mi istiyorsunuz? PM > Install-Package BarCode
bir örnek çalıştırın dize barkod haline geldiğini görün.