IronQR'de QR Kodlarını SVG Olarak Kaydetme

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

IronQR, QR kodlarını doğrudan SVG'e dışa aktaramaz. Yine de oluşturulan bit eşlemi bir üçüncü taraf kütüphane ile SVG dikdörtgenleri olarak yeniden çizerek vektör dosyası üretebilirsiniz.

Sebep alttaki görüntü yığınıdır. IronQR, görüntü işleme için SixLabors.ImageSharp kullanır ve PNG, JPEG, BMP gibi raster formatları işler ancak SVG çıktısı sunmaz. SVG, bağımlılığın desteklediği bir hedef format değildir.

Çözüm

IronQR ile her zamanki gibi QR kodunu oluşturun, ardından pikseleri dolaşarak ve matrisi Svg.NET kullanarak vektör şekilleri olarak yeniden oluşturun. IronQR'nin QR oluşturmasını korursunuz ve SVG'nin stil ve yapısını tamamen kontrol edersiniz.

1. QR Kodunu Oluşturun ve Bir Bitmap'e Dönüştürün

QR kodu yazın, bir AnyBitmap'e kaydedin, sonra piksellerin tek tek okunabilmesi için bunu bir System.Drawing.Bitmap'e dönüştürün.

var qr = QrWriter.Write("Hello SVG");
var anyBitmap = qr.Save();
// Convert AnyBitmap to System.Drawing.Bitmap
System.Drawing.Bitmap bit = anyBitmap;
var qr = QrWriter.Write("Hello SVG");
var anyBitmap = qr.Save();
// Convert AnyBitmap to System.Drawing.Bitmap
System.Drawing.Bitmap bit = anyBitmap;
Dim qr = QrWriter.Write("Hello SVG")
Dim anyBitmap = qr.Save()
' Convert AnyBitmap to System.Drawing.Bitmap
Dim bit As System.Drawing.Bitmap = anyBitmap
$vbLabelText   $csharpLabel

2. Pikselleri SVG Dikdörtgenleri Olarak Yeniden Çizin

Bitmap boyutunda bir SvgDocument oluşturun, sonra pikselleri döngüye alın ve bir piksel siyah okunduğunda oraya 1x1 SvgRectangle ekleyin. Eşik kontrolü (R, G ve B, hepsi 128'in altında), siyaha yakın pikselleri doldurulmuş hücreler olarak kabul eder.

// Create new SVG document
var svgDoc = new SvgDocument
{
    Width = bit.Width,
    Height = bit.Height
};
// Loop through bitmap pixels and add black pixels as SVG rectangles
for (int y = 0; y < bit.Height; y++)
{
    for (int x = 0; x < bit.Width; x++)
    {
        System.Drawing.Color pixel = bit.GetPixel(x, y);
        // Check if pixel is black (or close enough)
        if (pixel.R < 128 && pixel.G < 128 && pixel.B < 128)
        {
            var rect = new SvgRectangle
            {
                X = x,
                Y = y,
                Width = 1,
                Height = 1,
                Fill = new SvgColourServer(System.Drawing.Color.Black)
            };
            svgDoc.Children.Add(rect);
        }
    }
}
// Create new SVG document
var svgDoc = new SvgDocument
{
    Width = bit.Width,
    Height = bit.Height
};
// Loop through bitmap pixels and add black pixels as SVG rectangles
for (int y = 0; y < bit.Height; y++)
{
    for (int x = 0; x < bit.Width; x++)
    {
        System.Drawing.Color pixel = bit.GetPixel(x, y);
        // Check if pixel is black (or close enough)
        if (pixel.R < 128 && pixel.G < 128 && pixel.B < 128)
        {
            var rect = new SvgRectangle
            {
                X = x,
                Y = y,
                Width = 1,
                Height = 1,
                Fill = new SvgColourServer(System.Drawing.Color.Black)
            };
            svgDoc.Children.Add(rect);
        }
    }
}
Imports System.Drawing

' Create new SVG document
Dim svgDoc As New SvgDocument With {
    .Width = bit.Width,
    .Height = bit.Height
}

' Loop through bitmap pixels and add black pixels as SVG rectangles
For y As Integer = 0 To bit.Height - 1
    For x As Integer = 0 To bit.Width - 1
        Dim pixel As Color = bit.GetPixel(x, y)
        ' Check if pixel is black (or close enough)
        If pixel.R < 128 AndAlso pixel.G < 128 AndAlso pixel.B < 128 Then
            Dim rect As New SvgRectangle With {
                .X = x,
                .Y = y,
                .Width = 1,
                .Height = 1,
                .Fill = New SvgColourServer(Color.Black)
            }
            svgDoc.Children.Add(rect)
        End If
    Next
Next
$vbLabelText   $csharpLabel

3. SVG Dosyasını Yazın

Her siyah hücre eklendiği için belgeyi diske kaydedin.

// Save the result as SVG
svgDoc.Write("qr-from-ironqr.svg");
// Save the result as SVG
svgDoc.Write("qr-from-ironqr.svg");
' Save the result as SVG
svgDoc.Write("qr-from-ironqr.svg")
$vbLabelText   $csharpLabel

Bu size baskı veya yüksek çözünürlüklü kullanım için uygun ölçeklenebilir, vektör tabanlı bir QR kodu verir.

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 70,398 | Sürüm: 2026.7 yeni yayınlandı
Still Scrolling Icon

Hâlâ Kaydırıyor Musunuz?

Hızlıca kanıt ister misiniz? PM > Install-Package IronQR
bir örnek çalıştırın url'nizin bir QR koda dönüşmesini izleyin.