Zapisywanie Kodów QR jako SVG w IronQR

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

IronQR nie eksportuje kodów QR bezpośrednio do SVG. Możesz nadal stworzyć plik wektorowy, przeredagowując wygenerowany bitmapę jako prostokąty SVG z pomocą biblioteki zewnętrznej.

Powodem jest podstawowy stos obrazów. IronQR wykorzystuje SixLabors.ImageSharp do przetwarzania obrazu, które obsługuje formaty rastrowe, takie jak PNG, JPEG i BMP, ale nie oferuje wyjścia SVG. SVG po prostu nie jest docelowym formatem, który wspiera zależność.

Rozwiązanie

Wygeneruj kod QR z IronQR jak zwykle, następnie przejdź przez jego piksele i odbuduj matrycę jako kształty wektorowe za pomocą Svg.NET. Zachowujesz generowanie QR IronQR i zyskujesz pełną kontrolę nad stylizacją i strukturą SVG.

1. Wygeneruj Kod QR i Przekształć w Bitmapę

Napisz kod QR, zapisz go do AnyBitmap, a następnie rzutuj na System.Drawing.Bitmap, aby można było odczytywać piksele pojedynczo.

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. Narysuj piksele jako prostokąty SVG

Utwórz SvgDocument dopasowany do bitmapy, a następnie przejdź przez piksele i dodaj 1x1 SvgRectangle wszędzie tam, gdzie piksele są czarne. Sprawdzenie progu (R, G i B wszystkie poniżej 128) traktuje prawie czarne piksele jako wypełnione komórki.

// 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. Zapisz Plik SVG

Zapisz dokument na dysku po dodaniu każdej czarnej komórki.

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

To daje ci skalowalny, wektorowy kod QR, który nadaje się do druku lub użycia wysokiej rozdzielczości.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 70,398 | Wersja: 2026.7 właśnie wydany
Still Scrolling Icon

Wciąż przewijasz?

Chcesz szybkiego dowodu? PM > Install-Package IronQR
uruchom próbkę obserwuj, jak Twój URL staje się kodem QR.