Vectorizer.AI bietet eine hochentwickelte Bitmap-Nachzeichnungs-API. Die API zeichnet Pixel vollautomatisch und mit branchenführender Originaltreue in Vektoren nach.
Sie LADEN ein Bitmap-Bild HOCH und erhalten als Ergebnis eine Vektorgrafik:
$ curl https://de.vectorizer.ai/api/v1/vectorize \ -u xyz123:[secret] \ -F image=@example.jpeg \ -o result.svg
// Requires: org.apache.httpcomponents.client5:httpclient5-fluent Request request = Request.post("https://de.vectorizer.ai/api/v1/vectorize") .addHeader("Authorization", "Basic dmt5YzY3a3FhMjd5aWRkOltzZWNyZXRd") .body( MultipartEntityBuilder.create() .addBinaryBody("image", new File("example.jpeg")) // TODO: Replace with your image // TODO: Add more upload parameters here .build() ); ClassicHttpResponse response = (ClassicHttpResponse) request.execute().returnResponse(); if (response.getCode() == 200) { // Write result to disk, TODO: or wherever you'd like try (FileOutputStream out = new FileOutputStream("result.svg")) { response.getEntity().writeTo(out); } } else { System.out.println("Request Failed: Status: " + response.getCode() + ", Reason: " + response.getReasonPhrase()); }
using (var client = new HttpClient()) using (var form = new MultipartFormDataContent()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "INSERT_API_KEY_HERE"); form.Add(new ByteArrayContent(File.ReadAllBytes("example.jpeg")), "image", "example.jpeg"); // TODO: Replace with your image // TODO: Add more upload parameters here var response = client.PostAsync("https://de.vectorizer.ai/api/v1/vectorize", form).Result; if (response.IsSuccessStatusCode) { // Write result to disk, TODO: or wherever you'd like FileStream outStream = new FileStream("result.svg", FileMode.Create, FileAccess.Write, FileShare.None); response.Content.CopyToAsync(outStream).ContinueWith((copyTask) => { outStream.Close(); }); } else { Console.WriteLine("Request Failed: Status: " + response.StatusCode + ", Reason: " + response.ReasonPhrase); } }
// Requires "request" to be installed (see https://www.npmjs.com/package/request) var request = require('request'); var fs = require('fs'); request.post({ url: 'https://de.vectorizer.ai/api/v1/vectorize', formData: { image: fs.createReadStream('example.jpeg'), // TODO: Replace with your image // TODO: Add more upload options here }, auth: {user: 'xyz123', pass: '[secret]'}, followAllRedirects: true, encoding: null }, function(error, response, body) { if (error) { console.error('Request failed:', error); } else if (!response || response.statusCode != 200) { console.error('Error:', response && response.statusCode, body.toString('utf8')); } else { // Save result fs.writeFileSync("result.svg", body); } });
$ch = curl_init('https://de.vectorizer.ai/api/v1/vectorize'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Basic dmt5YzY3a3FhMjd5aWRkOltzZWNyZXRd')); curl_setopt($ch, CURLOPT_POSTFIELDS, array( 'image' => curl_file_create('example.jpeg'), // TODO: Add more upload options here )); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $data = curl_exec($ch); if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == 200) { // Save result file_put_contents("result.svg", $data); } else { echo "Error: " . $data; } curl_close($ch);
# Either use the sample code below, or this SDK: https://pypi.org/project/vectorizer-ai/ # Requires "requests" to be installed (see https://pypi.org/project/requests/) import requests response = requests.post( 'https://de.vectorizer.ai/api/v1/vectorize', files={'image': open('example.jpeg', 'rb')}, data={ # TODO: Add more upload options here }, auth=('xyz123', '[secret]') ) if response.status_code == requests.codes.ok: # Save result with open('result.svg', 'wb') as out: out.write(response.content) else: print("Error:", response.status_code, response.text)
# Requires: gem install httpclient require 'httpclient' client = HTTPClient.new default_header: { "Authorization" => "Basic dmt5YzY3a3FhMjd5aWRkOltzZWNyZXRd" } response = client.post("https://de.vectorizer.ai/api/v1/vectorize", { "image" => File.open("example.jpeg", "rb"), # TODO: Replace with your image # TODO: Add more upload parameters here }) if response.status == 200 then # Write result to disk, TODO: or wherever you'd like File.open("result.svg", 'w') { |file| file.write(response.body) } else puts "Error: Code: " + response.status.to_s + ", Reason: " + response.reason end
$ curl https://de.vectorizer.ai/api/v1/vectorize \ -u xyz123:[secret] \ -F 'image.url=https://example.com/example.jpeg' \ -o result.svg
// Requires: org.apache.httpcomponents.client5:httpclient5-fluent Request request = Request.post("https://de.vectorizer.ai/api/v1/vectorize") .addHeader("Authorization", "Basic dmt5YzY3a3FhMjd5aWRkOltzZWNyZXRd") .body( MultipartEntityBuilder.create() .addTextBody("image.url", "https://example.com/example.jpeg") // TODO: Replace with your image URL // TODO: Add more upload parameters here .build() ); ClassicHttpResponse response = (ClassicHttpResponse) request.execute().returnResponse(); if (response.getCode() == 200) { // Write result to disk, TODO: or wherever you'd like try (FileOutputStream out = new FileOutputStream("result.svg")) { response.getEntity().writeTo(out); } } else { System.out.println("Request Failed: Status: " + response.getCode() + ", Reason: " + response.getReasonPhrase()); }
using (var client = new HttpClient()) using (var form = new MultipartFormDataContent()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "INSERT_API_KEY_HERE"); form.Add(new StringContent("https://example.com/example.jpeg"), "image.url"); // TODO: Replace with your image URL // TODO: Add more upload parameters here var response = client.PostAsync("https://de.vectorizer.ai/api/v1/vectorize", form).Result; if (response.IsSuccessStatusCode) { // Write result to disk, TODO: or wherever you'd like FileStream outStream = new FileStream("result.svg", FileMode.Create, FileAccess.Write, FileShare.None); response.Content.CopyToAsync(outStream).ContinueWith((copyTask) => { outStream.Close(); }); } else { Console.WriteLine("Request Failed: Status: " + response.StatusCode + ", Reason: " + response.ReasonPhrase); } }
// Requires "request" to be installed (see https://www.npmjs.com/package/request) var request = require('request'); var fs = require('fs'); request.post({ url: 'https://de.vectorizer.ai/api/v1/vectorize', formData: { 'image.url': 'https://example.com/example.jpeg', // TODO: Replace with your image // TODO: Add more upload options here }, auth: {user: 'xyz123', pass: '[secret]'}, followAllRedirects: true, encoding: null }, function(error, response, body) { if (error) { console.error('Request failed:', error); } else if (!response || response.statusCode != 200) { console.error('Error:', response && response.statusCode, body.toString('utf8')); } else { // Save result fs.writeFileSync("result.svg", body); } });
$ch = curl_init('https://de.vectorizer.ai/api/v1/vectorize'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Basic dmt5YzY3a3FhMjd5aWRkOltzZWNyZXRd')); curl_setopt($ch, CURLOPT_POSTFIELDS, array( 'image.url' => 'https://example.com/example.jpeg', // TODO: Add more upload options here )); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $data = curl_exec($ch); if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == 200) { // Save result file_put_contents("result.svg", $data); } else { echo "Error: " . $data; } curl_close($ch);
# Either use the sample code below, or this SDK: https://pypi.org/project/vectorizer-ai/ # Requires "requests" to be installed (see https://pypi.org/project/requests/) import requests response = requests.post( 'https://de.vectorizer.ai/api/v1/vectorize', data={ 'image.url': 'https://example.com/example.jpeg', # TODO: Add more upload options here }, auth=('xyz123', '[secret]') ) if response.status_code == requests.codes.ok: # Save result with open('result.svg', 'wb') as out: out.write(response.content) else: print("Error:", response.status_code, response.text)
# Requires: gem install httpclient require 'httpclient' client = HTTPClient.new default_header: { "Authorization" => "Basic dmt5YzY3a3FhMjd5aWRkOltzZWNyZXRd" } response = client.post("https://de.vectorizer.ai/api/v1/vectorize", { "image.url" => "https://example.com/example.jpeg", # TODO: Replace with your image URL # TODO: Add more upload parameters here }) if response.status == 200 then # Write result to disk, TODO: or wherever you'd like File.open("result.svg", 'w') { |file| file.write(response.body) } else puts "Error: Code: " + response.status.to_s + ", Reason: " + response.reason end
Wir haben ein benutzerdefiniertes ChatGPT erstellt, das Ihnen bei Ihrer API-Integration helfen kann. Es kann Fragen zur API-Dokumentation beantworten und Beispielcode in Ihrer bevorzugten Sprache bereitstellen, der auf Ihren Anwendungsfall zugeschnitten ist.
Chat with the Vectorizer.AI API Chatbot
Der Chatbot befindet sich in der Beta-Phase und macht Fehler. Überprüfe die Antworten noch einmal und bitte das System, den Code zu überarbeiten, um Fehler und Auslassungen zu korrigieren.
Die API wurde so konzipiert, dass sie viele verschiedene Anwendungsfälle unterstützt. Hier sind einige häufig verwendete:
Verwenden Sie den Endpunkt Vektorisieren und die obigen Code-Beispiele.
Wenn Sie sehr viele API-Aufrufe benötigen, um einen Verkauf zu tätigen, können Sie die kostengünstigeren Vorschauen nutzen, bevor Sie tatsächlich einen Auftrag erhalten.
Verwenden Sie den Endpunkt Vektorisieren mit mode=preview
und policy.retention_days > 0
, um die Vorschau zu erhalten. Achten Sie darauf, das in der Antwortkopfzeile X-Image-Token
zurückgegebene Bild-Token zu behalten.
Verwenden Sie nach der Konvertierung den Endpunkt Download mit dem Bild-Token, um das vollständige Ergebnis herunterzuladen.
Optional: Wenn Sie zusätzliche Ergebnisformate benötigen (z. B. PNG, PDF usw.), achten Sie darauf, den in der Download-Antwortkopfzeile X-Receipt
zurückgegebenen Beleg zu behalten. Verwenden Sie dann den Endpunkt Download mit dem Bild-Token und dem Beleg zum Herunterladen der restlichen Formate.
Verwenden Sie den Endpunkt Vektorisieren mit policy.retention_days > 0
, um das erste Ergebnis zu erhalten. Achten Sie darauf, das in der Antwortkopfzeile X-Image-Token
zurückgegebene Bild-Token zu behalten.
Verwenden Sie den Endpunkt Download mit dem Bild-Token zum Herunterladen der anderen Formate.
Verwenden Sie den Endpunkt Vektorisieren mit policy.retention_days > 0
, um das erste Ergebnis zu erhalten. Achten Sie darauf, das in der Antwortkopfzeile X-Image-Token
zurückgegebene Bild-Token zu behalten.
Verwenden Sie den Endpunkt Vektorisieren mit dem Bild-Token, um die von Ihnen benötigten restlichen Verarbeitungsoptionen zu durchlaufen.
Sie können aber auch jedes Bild einzeln verarbeiten und brauchen dabei nicht auf das Bild-Token zu achten. Das Bild-Token spart ein wenig Bandbreite und Latenz ein.
Aktion | Punkte | Beschreibung |
---|---|---|
Tests | 0.00 |
Seine Integration in die API und Tests der API sind kostenlos.
Verwenden Sie Die Qualität des Ergebnisses können Sie mithilfe der interaktiven Web-App auf der Homepage der Website beurteilen. |
Vorschau | 0.20 |
Wir bieten Vorschauergebnisse, die Sie Ihren Endbenutzern zeigen können, bevor diese einen Kauf tätigen. Vorschauen sind PNG-Bilder, die viermal größer als Ihre Eingabe sind. Sie sind mit einem dezenten Wasserzeichen versehen.
Verwenden Sie |
Vektorisieren | 1.00 | Vektorisieren Sie ein Bitmap-Bild in ein Vektorbild. |
Upgrade-Vorschau | 0.90 | Laden Sie das Produktionsergebnis nach einer Vorschau des API-Aufrufs herunter. Preisermäßigung im Vergleich zur Vektorisierung ganz von Anfang an. |
Download-Format | 0.10 | Laden Sie ein anderes Format des Ergebnisses herunter (z. B. SVG, PNG, PDF usw.). Preisermäßigung im Vergleich zur Vektorisierung ganz von Anfang an. |
Speichertag | 0.01 | Preis pro Tag für das Speichern des Ergebnisses über den ersten Tag hinaus (der erste Tag ist kostenlos). |
Beziehen Sie sich bitte auf die Preisgebungsseite, auf der Sie die Abonnementpläne einsehen können.
Die API verwendet eine standardmäßige HTTP Basic Access Authentication. Alle Anfragen an die API müssen über HTTPS erfolgen und Ihre API-Zugangsdaten enthalten, wobei die API-ID als Benutzername und der geheime API-Schlüssel als Kennwort fungieren.
Ihre HTTP-Client-Bibliothek muss die Servernamensanzeige (Server Name Indication (SNI)) unterstützen, damit Anfragen erfolgreich gestellt werden können. Wenn seltsame Handshake-Fehler auftreten, ist dies wahrscheinlich die Ursache.
Die Verwendung der API unterliegt einer Geschwindigkeitsbegrenzung mit großzügigen Limits und keiner festen Obergrenze.
Während des normalen vom Endbenutzer gesteuerten Betriebs sind Geschwindigkeitsbegrenzungen sehr unwahrscheinlich, da die Nutzung graduell ab- und zunimmt, sodass der Dienst reibungslos ausgeführt werden kann.
Bei Stapelaufträgen empfehlen wir jedoch, mit höchstens 5 Threads zu beginnen und dann alle 5 Minuten 1 neuen Thread hinzuzufügen, bis der gewünschte Parallelitätsgrad erreicht ist. Lassen Sie uns bitte vor Beginn wissen, wenn Sie mehr als 100 gleichzeitige Threads benötigen.
Wenn zu viele Anfragen eingereicht werden, erhalten Sie in zunehmendem Maße die Antwort 429 Too Many Requests
. In diesem Fall sollten Sie den Vorgang linear zurückfahren: nach der ersten dieser Antworten warten Sie 5 Sekunden, bis Sie die nächste Anfrage einreichen. Bei der zweiten aufeinanderfolgenden 429-Antwort warten Sie 2*5=10 Sekunden, bis Sie die nächste Anfrage einreichen. Bei der dritten Antwort warten Sie 3*5=15 Sekunden usw.
Sie können den Rückfahrzähler nach einer erfolgreichen Anfrage zurücksetzen und sollten das Rückfahren pro Thread vornehmen (d. h. die Threads sollten unabhängig voneinander ausgeführt werden).
Die API-Anfragen werden normalerweise innerhalb von Sekunden abgeschlossen, aber wenn transiente Belastungsspitzen auftreten, kann es zu längeren Verarbeitungszeiten kommen.
Um sicherzustellen, dass Ihre Client-Bibliothek API-Anfragen nicht vorzeitig beendet, sollte sie mit einem Leerlauftimeout von mindestens 180 Sekunden konfiguriert werden.
Wir verwenden herkömmliche HTTP-Status, um den Erfolg oder Fehlschlag einer API-Anfrage anzuzeigen, und stellen wichtige Fehlerinformationen im zurückgegebenen Fehler-JSON-Objekt bereit.
Wir versuchen, bei einer problematischen Anfrage immer ein Fehler-JSON-Objekt zurückzugeben. Es ist jedoch theoretisch möglich, dass interne Serverfehler auftreten, die zu Nicht-JSON-Fehlerantworten führen.
Attribute |
|
---|---|
status | Der HTTP-Status der Antwort, der hier zur Unterstützung des Debugging wiederholt wird. |
code | Vectorizer.AI – interner Fehlercode. |
message | Visuell lesbare Fehlermeldung, die für das Debugging hilfreich sein soll. |
Wenn der HTTP-Status für Ihre Anfrage 200 ist, wird kein Fehler-JSON-Objekt zurückgegeben, und Sie können mit großer Sicherheit davon ausgehen, dass die Anfrage generell erfolgreich war.
Manche HTTP-Client-Bibliotheken führen für HTTP-Status im Bereich 400
-599
zu Ausnahmen. Diese Ausnahmen müssen erfasst und entsprechend behandelt werden.
HTTP Status | Bedeutung |
---|---|
200 -299
|
Erfolg |
400 -499
|
Es gibt ein Problem bei den in der Anfrage angegebenen Informationen (es fehlt z. B. ein Parameter). Prüfen Sie bitte die Fehlermeldung, um eine Methode zu finden, den Fehler zu beheben. |
500 -599
|
Bei Vectorizer.AI ist ein interner Fehler aufgetreten. Warten Sie einen Moment und versuchen Sie es erneut. Wenn das Problem immer noch auftritt, schicken Sie uns eine E-Mail. |
Beispiel für eine Fehlerantwort
{ "error" : { "status" : 400, "code" : 1006, "message" : "Failed to read the supplied image. " } }
Kürzlich aufgetretene API-Fehler sind auf Ihrer Kontoseite aufgeführt, sodass Sie sie leichter beheben können.
Außerdem gibt es eine Liste aller von der API zurückgegebenen Fehlerantworten.
Hier sind die von uns verwendeten vordefinierten Antwortkopfzeilen:
Kopfzeile | Beschreibung |
---|---|
X-Image-Token
|
Wird zurückgegeben, wenn Ihre Vektorisierungsanfrage
|
X-Receipt
|
Wird zurückgegeben, wenn Sie ein Produktionsergebnis mithilfe eines Vorschau-Bild-Tokens herunterladen. Kann zum Herunterladen zusätzlicher Formate (z. B. SVG, PNG, PDF usw.) des Ergebnisses zum Download-Formatpreis anstelle des Upgrade-Vorschaupreises verwendet werden. |
X-Credits-Calculated
|
Wird mit Testanfragen zurückgegeben, um die Kosten zu zeigen, die angefallen wären, wenn es sich um eine normale Anfrage gehandelt hätte. |
X-Credits-Charged
|
Wird mit allen Anfragen zurückgegeben, um die angefallenen Kosten zu zeigen. Immer 0 für Testanfragen. |
POST
https://api.vectorizer.ai/api/v1/vectorize
Zum Vektorisieren eines Bildes führen Sie einen standardmäßigen HTTP POST-Dateiupload durch. Denken Sie daran, dass der Inhaltstyp als multipart/form-data
vorliegen muss, wenn binäre Dateien hochgeladen werden.
Die nachstehende Tabelle enthält alle API-Parameter, die Sie auch gleich ausprobieren können. Jeder Parameter wird kurz beschrieben, aber sehen Sie sich auf jeden Fall die ausführliche Dokumentation zu den Ausgabeoptionen an.
POST
https://api.vectorizer.ai/api/v1/download
Dieser Endpunkt ermöglicht Ihnen Folgendes:
Herunterladen des vollständigen Produktionsergebnisses nach einem Vorschau-API-Aufruf.
Wir nehmen die Kopfzeile X-Receipt
in die Antwort auf, damit Sie anschließend zusätzliche Ausgabeformate zum reduzierten Download-Formatpreis herunterladen können.
Herunterladen mehrerer Ausgabeformate für dasselbe Bild und Nutzung mehrerer Verarbeitungsoptionen zum reduzierten Download-Formatpreis, ohne dass sie alle ganz von Anfang an vektorisiert werden müssen.
POST
https://api.vectorizer.ai/api/v1/delete
Bilder, die mit policy.retention_days > 0
vektorisiert wurden, werden für den angeforderten Zeitraum gespeichert und kurz danach automatisch gelöscht.
Normalerweise muss dieser Endpunkt nicht aufgerufen werden. Er wird bereitgestellt, damit Sie Bilder löschen können, bevor der Speicherzeitraum abläuft. Das frühzeitige Löschen eines Bildes bedeutet nicht, dass Sie für die restlichen Speichertage eine Rückerstattung erhalten.
Antwortattribute |
|
---|---|
success |
|
Beispiel einer Antwort
{ "success" : true }
GET
https://api.vectorizer.ai/api/v1/account
Rufen Sie allgemeine Informationen über Ihr Konto auf, beispielsweise Abonnementstatus und Anzahl der verbliebenen Punkte.
Parameter |
|
---|---|
Keine |
Antwortattribute |
|
---|---|
subscriptionPlan |
Der Plan, den Sie derzeit abonniert haben, bzw. „Keine“. |
subscriptionState |
Der Status Ihres aktuellen Abonnements („aktiv“ oder „überfällig“) oder „abgelaufen“, wenn kein Abonnement vorliegt. |
credits |
Die Anzahl der in Ihrem Konto verbliebenen API-Punkte. Ist 0, wenn derzeit kein Abonnement vorliegt oder wenn es sich um einen Plan ohne API handelt. Kann eine Bruchzahl sein und muss deshalb als Double analysiert werden. |
Probieren Sie es
Benutzername = API-ID, Kennwort = geheimer API-Schlüssel
cURL
$ curl "https://api.vectorizer.ai/api/v1/account" \ -u vkyc67kqa27yidd:[secret]
Beispiel einer Antwort
{ "subscriptionPlan" : "none", "subscriptionState" : "ended", "credits" : 0 }
Datum | Ändern |
---|---|
01.10.2024 | Es wurde ein KI-Chatbot hinzugefügt, der die Integration mit der API unterstützt. |
23.09.2024 | API wurde stark erweitert, um mehr Betriebsmodi zu unterstützen. Bild-Tokens, Belege, Kopfzeilen für Gebühren pro Aufruf und die Endpunkte „Download“ und „Löschen“ wurden hinzugefügt. |
11.06.2024 |
processing.palette wurde hinzugefügt
|
04.03.2024 | Abschnitt über Timeouts hinzugefügt. |
24.01.2024 | Kontostatus-Endpunkt wurde hinzugefügt. Kürzlich aufgetretene API-Fehler wurden der Kontoseite hinzugefügt. Eine Liste aller API-Fehlerantworten wurde hinzugefügt. |
16.01.2024 | Fehler-JSON-Objekt wurde dokumentiert. |
03.10.2023 |
Es wurde klargestellt, dass output.gap_filler.enabled=true zu einem Ergebnis mit mehr Farben als durch processing.max_colors angefordert führt.
|
20.09.2023 |
mode wurde hinzugefügt
|
01.08.2023 |
Es wurde eine Ausgabegrößen-Optionsgruppe mit umfangreichen Funktionen mit folgenden Optionen hinzugefügt: output.size.scale , output.size.width , output.size.height , output.size.unit , output.size.aspect_ratio , output.size.align_x , output.size.align_y , output.size.input_dpi und output.size.output_dpi . Es wurde eine Bitmap-Ausgabe-Optionsgruppe mit einer Option hinzugefügt: output.bitmap.anti_aliasing_mode .
|
07.06.2023 |
processing.max_colors wurde hinzugefügt
|
31.05.2023 | API-Parameter wurden erheblich erweitert. API-Endpunkt wurde aktualisiert. |
10.03.2023 | Erstversion. |