Vektorisieren von Bildern – Beispiele für Python-Code
Dieser Artikel führt Sie in die Grundlagen der Vektorisierung von Bildern mithilfe der Python-Bibliothek Aspose.SVG ein. Der Artikel geht durch mehrere Python-Beispiele, die die Funktionalität von ImageVectorization und die Auswirkungen von Konfigurationseigenschaften auf das Ergebnis der Vektorisierung demonstrieren.
Rasterbild vs. Vektorgrafik
Es gibt zwei Haupttypen von Bildern: Vektor- und Rasterbilder. Die Wahl zwischen ihnen hängt vom konkreten Anwendungsfall ab. Eine Bitmap, auch Rasterbild genannt, ist ein zweidimensionales Array, das Farben einzelnen Pixeln zuordnet. Rasterbilder haben in der Regel eine viel größere Dateigröße als Vektorbilder und eignen sich gut für Fotos oder Bilder mit Farbverläufen. Ein wesentlicher Nachteil von Rasterbildern ist jedoch der Qualitätsverlust bei der Skalierung, der zu Pixelbildung und Unschärfe führt.
Vektorgrafiken hingegen bestehen aus geometrischen Formen wie Bézier-Kurven, Splines und Linien. Diese Formen werden durch mathematische Gleichungen bestimmt, sodass Vektorbilder ohne Qualitätsverlust unbegrenzt skaliert werden können. Dadurch eignen sich Vektorgrafiken ideal für Logos, Symbole, Seitenlayouts, Karten, Grafiken, Strichzeichnungen und Illustrationen. Sie führen häufig zu kleineren Dateigrößen als Rasterbilder, insbesondere bei einfacheren Projekten.
Vektorisieren von Bildern
Bei der Bildvektorisierung handelt es sich um den Prozess der Umwandlung eines Rasterbilds in Vektorgrafiken. Dabei werden die Pixelinformationen eines Rasterbilds in eine Reihe mathematischer Kurven und Formen umgewandelt. Zu den Vorteilen von Vektorbildern gehören ihre Skalierbarkeit und typischerweise kleinere Dateigrößen für bestimmte Bildtypen. Allerdings sind Vektorbilder möglicherweise weniger effektiv für sehr detaillierte Bilder oder Fotos, die komplexe Farbvariationen und -verläufe erfordern.
Aspose.SVG for Python via .NET bietet eine robuste Lösung für die Vektorisierung von Bildern über den Namespace
ImageVectorization. Dadurch können Benutzer verschiedene Rasterbildformate wie JPG, PNG, BMP, TIFF und GIF in das Vektor-SVG-Dateiformat konvertieren. Der Vektorisierungsprozess kann mithilfe von Konfigurationseigenschaften wie path_builder
, colors_limit
, error_threshold
, trace_smoother
, max_iterations
, stencil
usw. fein abgestimmt werden, die sich auf die Qualität und Detailgenauigkeit der resultierenden Vektorgrafiken auswirken . Diese Technologie ermöglicht eine präzise Steuerung des Vektorisierungsprozesses und gewährleistet so eine hohe Qualität und Skalierbarkeit von Vektorbildern.
Python-Beispiel 1. Bildvektorisierung
Um ein Bild mit der Python-Bibliothek Aspose.SVG zu vektorisieren, sollten Sie einige Schritte befolgen:
- Erstellen Sie eine Instanz der Klasse
BezierPathBuilder, um die Pfaderstellungsstrategie zu definieren. Hier können Sie die Eigenschaften von BezierPathBuilder festlegen, z. B.
trace_smoother
,error_threshold
undmax_iterations
. - Erstellen Sie eine Instanz der Klasse
ImageVectorizer. Der ImageVectorizer ist die Hauptklasse zum Konvertieren von Bildern in Vektorgrafiken.
- Weisen Sie die
path_builder
-Konfiguration (zuvor definiert) demvectorizer
-Objekt zu. Das bedeutet, dass der Vektorisierer die im path_builder angegebenen Einstellungen für die Pfaderstellung und -optimierung verwendet. - Legen Sie die Eigenschaften
colors_limit
undline_width
der Klasse ImageVectorizerConfiguration fest.
- Weisen Sie die
- Verwenden Sie die Methode vectorize(), um ein Bild aus der angegebenen Datei zu vektorisieren.
- Speichern Sie das vektorisierte Bild als SVG-Datei mit der Methode
save der Klasse
SVGDocument
.
1import os
2from aspose.svg import *
3from aspose.svg.converters import *
4from aspose.svg.drawing import *
5from aspose.svg.rendering.image import *
6from aspose.svg.imagevectorization import *
7
8# Setup directories
9input_folder = "data/"
10output_folder = "output/"
11src_file = "fish.png"
12output_file = "fish-vectorized.svg"
13if not os.path.exists(output_folder):
14 os.makedirs(output_folder)
15
16# Configuration for vectorization
17path_builder = BezierPathBuilder()
18path_builder.trace_smoother = ImageTraceSmoother(3)
19path_builder.error_threshold = 10.0
20path_builder.max_iterations = 20
21
22vectorizer = ImageVectorizer()
23vectorizer.configuration.path_builder = path_builder
24vectorizer.configuration.colors_limit = 3
25vectorizer.configuration.line_width = 1.5
26
27# Vectorize an image
28with vectorizer.vectorize(os.path.join(input_folder, src_file)) as document:
29 output_file = os.path.join(output_folder, output_file)
30 document.save(output_file)
Mit diesem Codebeispiel können Sie ein Farbrasterbild in ein Vektorbild vektorisieren. Die Vektorisierungsoptionen werden so ausgewählt, dass das in Abbildung (b) dargestellte gewünschte Ergebnis erzielt wird. Wir wollten ein vereinfachtes dreifarbiges Bild des Originals. Die folgende Abbildung zeigt das Quellbild (a) und das vektorisierte Bild unter Verwendung des obigen Python-Codeausschnitts (b).
Vektorisierungsoptionen
Sie können benutzerdefinierte Einstellungen anwenden, um das beste Ergebnis bei der Bildvektorisierung zu erzielen. Nachfolgend finden Sie einige der wichtigsten Einstellungen, die Sie steuern können, zusammen mit ihren Standardwerten:
- tolerance – Der Wert der Toleranz bestimmt die maximale Fehlertoleranz, die für die Eliminierung eines Punktes aus der Spur zulässig ist. Er muss zwischen 0 und 4 liegen. Der Standardwert ist 0,3.
- trace_smoother – Diese Eigenschaft wird verwendet, um die während des Vektorisierungsprozesses generierten Pfade zu glätten. Es kann ein Parameter (
severity
) verwendet werden, der den Grad der angewendeten Glättung definiert. - error_threshold – Diese Eigenschaft definiert die maximale Abweichung der Punkte von der angepassten Kurve. Standardmäßig ist es 30.
- max_iterations – definiert eine Anzahl von Iterationen für die Approximationsmethode der kleinsten Quadrate. Standardmäßig ist es 30.
- Hintergrundfarbe – der Standardwert ist transparentes Weiß.
- colors_limit – legt die maximale Anzahl von Farben fest, die zur Quantisierung eines Bildes verwendet werden. Der Standardwert ist 25.
- line_width – legt die Linienbreite fest. Der Wert dieses Parameters wird durch die Grafikskalierung beeinflusst. Der Standardwert ist 1.
- image_size_limit – maximale Größe eines Bildes, bestimmt durch die Multiplikation von Bildbreite und -höhe. Die Größe des Bildes wird basierend auf dieser Eigenschaft skaliert. Der Standardwert ist 1800000.
Python-Beispiel 2. Fotovektorisierung
Ist es möglich, ein Foto im Vektorformat so zu konvertieren, dass es genauso aussieht wie das Foto?
SVG eignet sich nicht gut zum Zeichnen fotorealistischer Bilder. Bei Vektorbildern sind noch keine natürlichen Farbübergänge möglich. Vektorgrafiken eignen sich am besten zum Erstellen von Logos, Illustrationen und technischen Zeichnungen. Es ist nicht das am besten geeignete Format für Halbtonbilder mit Farbmischungen oder zum Bearbeiten von Fotos. Durch die Vektorisierung von Fotos können jedoch beeindruckende künstlerische Effekte erzielt werden, die interessant und nützlich sein können.
In diesem Abschnitt konvertieren wir ein Foto in das Vektorformat und versuchen, Vektorisierungsoptionen so auszuwählen, dass das Ergebnis mit dem Foto identisch aussieht:
1import os
2from aspose.svg import *
3from aspose.svg.converters import *
4from aspose.svg.drawing import *
5from aspose.svg.rendering.image import *
6from aspose.svg.imagevectorization import *
7
8# Setup directories
9input_folder = "data/"
10output_folder = "output/"
11src_file = "lioness.jpg"
12output_file = "lioness.svg"
13if not os.path.exists(output_folder):
14 os.makedirs(output_folder)
15
16# Configuration for vectorization
17path_builder = BezierPathBuilder()
18path_builder.trace_smoother = ImageTraceSmoother(1)
19path_builder.error_threshold = 30.0
20path_builder.max_iterations = 30
21
22vectorizer = ImageVectorizer()
23vectorizer.configuration.path_builder = path_builder
24vectorizer.configuration.colors_limit = 25
25vectorizer.configuration.line_width = 1.5
26
27# Vectorize a photo
28with vectorizer.vectorize(os.path.join(input_folder, src_file)) as document:
29 output_file = os.path.join(output_folder, output_file)
30 document.save(output_file)
Die Abbildung zeigt das Quellfoto (a), das vektorisierte Bild mithilfe des Python-Codeausschnitts (b).
Wie oben erwähnt, ist SVG nicht das am besten geeignete Format für Halbtonbilder mit Farbmischungen usw. Der Vektorisierungsprozess nutzt die Quantisierung von Farbbildern. Alle kleinen gleichfarbigen Punkte oder Pixel ersetzen wir durch geometrische Formen oder Kurven. Das Quellfoto (a) und die resultierende SVG-Datei (b) können Sie finden und im Detail ansehen, indem Sie den Links folgen – lioness.jpg, lioness.svg.
Lizenzbeschränkungen
Eine kostenlose Testversion von Aspose.SVG for Python via .NET bietet alle Funktionen für die Bildvektorisierung mit Ausnahme der folgenden:
- Zur Quantisierung eines Bildes werden nur 4 dominante Farben verwendet.
- Nur 50 % der Knoten des SVG-Dokuments werden während der Serialisierung gespeichert.
Wenn Sie Aspose.SVG for Python via .NET ohne Evaluierungseinschränkungen testen möchten, fordern Sie eine 30-tägige temporäre Lizenz an. Weitere Informationen finden Sie unter Wie bekomme ich eine temporäre Lizenz?
Die Abbildung zeigt das Ergebnis der Foto-zu-Vektor-Konvertierung ohne Anwendung einer Lizenz.
Siehe auch
- Im Artikel Bildvektorisierung – Arbeitsablauf finden Sie eine Beschreibung des Bildvektorisierungsprozesses – Farbquantisierung, Größenänderung, Konturverfolgung usw.
- Der Artikel Image Stencil – So erstellen Sie eine Schablone in Python erklärt, wie Sie Schablonen aus Bildern mit Aspose.SVG for Python via .NET-API erstellen.
- Sie können Image Vectorizer - Bildschablonenhersteller in Echtzeit ausprobieren! Dieses Tool bietet verschiedene Optionen zur Vorverarbeitung von Bitmaps vor dem Speichern im SVG-Format. Sie können die vektorisierte SVG-Datei interaktiv verwalten, indem Sie Steuerelemente verwenden, die mit den entsprechenden Vektorisierungsoptionen verknüpft sind.
Aspose.SVG bietet einen kostenlosen Online- Bild-Vektorisierer an, mit dem Bitmap-Bilder wie JPG, PNG, BMP, TIFF und GIF in Vektorgrafiken konvertiert werden können. Nach der Konvertierung werden alle Vektorgrafikelemente als SVG-Dateien gespeichert. Unser kostenloser Vektorisierer funktioniert auf jeder Plattform. Mit dieser App können Sie verschiedene Optionen anwenden, um das perfekte Ergebnis zu erzielen. Sparen Sie Zeit und erleben Sie die Vorteile von Vektorgrafiken mit unserem kostenlosen Image Vectorizer!