Vectorizer.AI oferuje pełnowartościowy interfejs API do trasowania bitmap. API w pełni automatycznie i z najwyższą wiernością trasuje piksele do postaci wektorowej.
Użyj POST wobec obrazu bitmapowego i uzyskaj zwektoryzowany rezultat:
$ curl https://pl.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://pl.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://pl.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://pl.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://pl.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://pl.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://pl.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://pl.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://pl.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://pl.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://pl.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://pl.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://pl.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://pl.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
Stworzyliśmy niestandardowy ChatGPT, który może pomóc w integracji API. Może odpowiadać na pytania dotyczące dokumentacji interfejsu API i dostarczyć przykładowy kod w preferowanym języku dostosowany do Twojego przypadku użycia.
Chat with the Vectorizer.AI API Chatbot
Chatbot jest w wersji beta i popełnia błędy. Sprawdź dokładnie odpowiedzi i poproś go o zmianę kodu, aby naprawić błędy i pominięcia.
Interfejs API jest przeznaczony do obsługi wielu różnych przypadków użycia. Oto kilka typowych:
Użyj punktu końcowego Vectorize i przykładów kodu powyżej.
Jeśli chcesz wykonać wiele połączeń API, aby dokonać sprzedaży, możesz korzystać z podglądów o niższych kosztach, dopóki faktycznie nie przekonwertujesz klienta.
Use the Vectorize endpoint with mode=preview
and policy.retention_days > 0
to get the preview, making sure to retain the Image Token returned in the X-Image-Token
response header.
Po konwersji użyj punktu końcowego Pobierz z tokenem obrazu, aby pobrać pełny wynik.
Optional: if you need additional result formats (e.g. PNG, PDF, etc), be sure to retain the Receipt returned in the X-Receipt
download response header. Następnie użyj punktu końcowego Pobierz z tokenem obrazu i pokwitowaniem, aby pobrać pozostałe formaty.
Use the Vectorize endpoint with policy.retention_days > 0
to get the first result, making sure to retain the Image Token returned in the X-Image-Token
response header.
Użyj punktu końcowego Pobierz z tokenem obrazu, aby pobrać inne formaty.
Use the Vectorize endpoint with policy.retention_days > 0
to get the first result, making sure to retain the Image Token returned in the X-Image-Token
response header.
Użyj punktu końcowego Vectorize z tokenem obrazu, aby wykonać iterację pozostałych opcji przetwarzania, których potrzebujesz.
Alternatywnie możesz przetwarzać każdy obraz indywidualnie i nie martwić się o Token obrazu. Token obrazu oszczędza trochę przepustowości i opóźnień.
Działanie | Środki | Opis |
---|---|---|
Testowanie | 0.00 |
Integracja z API i testowanie go jest bezpłatna, nie wymaga subskrypcji.
Use Możesz ocenić jakość wyników za pomocą interaktywnej aplikacji internetowej na pierwszej stronie. |
Podgląd | 0.20 |
Oferujemy podgląd wyników, które możesz pokazać użytkownikom końcowym przed dokonaniem zakupu. Podglądy są obrazami PNG czterokrotnie większymi niż dane wejściowe i są wyposażone w dyskretny znak wodny.
Use |
Wektoryzacja | 1.00 | Wektoryzuj obraz bitmapowy do obrazu wektorowego. |
Podgląd aktualizacji | 0.90 | Pobierz wynik produkcji po wywołaniu interfejsu API podglądu. Zdyskontowane w porównaniu do wektoryzacji od podstaw. |
Format pobierania | 0.10 | Pobierz inny format (np. SVG, PNG, PDF itp.) wyniku. Zdyskontowane w porównaniu do wektoryzacji od podstaw. |
Dzień przechowywania | 0.01 | Cena za dzień za przechowywanie wyniku po pierwszym dniu, która jest bezpłatna. |
Zapoznaj się ze stroną cennika planów subskrypcji.
Interfejs API używa standardowego podstawowego uwierzytelniania dostępu HTTP. Wszystkie żądania do interfejsu API muszą być kierowane przez HTTPS i muszą zawierać twoje poświadczenia API, z identyfikatorem API jako użytkownikiem i kluczem tajnym API jako hasłem.
Aby z powodzeniem wykonywać żądania, twoja biblioteka klienta HTTP musi obsługiwać oznaczanie nazwy serwera (SNI). Jeśli otrzymujesz dziwne błędy uzgadniania, to prawdopodobnie z tego powodu.
Używanie interfejsu API podlega ograniczeniu przepustowości z wysokimi przydziałami i bez stałej górnej granicy.
Prawdopodobieństwo napotkania na ograniczenie szybkości w zwykłym trybie działania sterowanym przez użytkownika końcowego jest małe, jako że usługa płynnie obsługuje tego rodzaju tryb użycia.
W przypadku zadań wsadowych zalecamy jednak, żeby zacząć od nie więcej niż 5 wątków, dodając 1 nowy wątek co 5 minut aż do osiągnięcia oczekiwanego poziomu równoległości. W razie potrzeby więcej niż 100 współbieżnych wątków, prosimy o kontakt przed rozpoczęciem procesu.
Przesłanie zbyt wielu żądań spowoduje otrzymanie odpowiedzi 429 Too Many Requests
. W takim wypadku należy zastosować wycofanie liniowe: po otrzymaniu pierwszej takiej odpowiedzi odczekaj 5 sekund przed przesłaniem kolejnego żądania. Po drugiej kolejnej odpowiedzi 429 odczekaj 2*5=10 sekund przed przesłaniem kolejnych żądań. Po trzeciej odpowiedzi odczekaj 3*5=15 sekund, itd.
Po pomyślnie wykonanym żądaniu możesz zresetować licznik wycofania i stosować wycofanie dla poszczególnych wątków (tzn. wątki powinny działać niezależnie od siebie).
Podczas gdy żądania API są zwykle wypełniane w ciągu kilku sekund, podczas przejściowych skoków obciążenia możliwe jest dłuższe czasy przetwarzania.
To ensure your client library doesn't prematurely terminate API requests it should be configured with an idle timeout of at least 180 seconds.
Aby określić czy dane żądanie API zakończyło się pomyślnie czy niepomyślnie używamy konwencjonalnych statusów HTTP, uwzględniając istotne informacje o błędzie w zwróconym obiekcie JSON błędu.
Staramy się zawsze zwrócić obiekt JSON błędu dla każdego problematycznego żądania. Zawsze istnieje jednak teoretyczna możliwość wewnętrznych awarii serwera skutkujących odpowiedzią na błąd inną niż JSON.
Atrybuty |
|
---|---|
status | Status HTTP odpowiedzi, powtórzony tutaj żeby pomóc z debugowaniem. |
code | Vectorizer.AI internal error code. |
message | Czytelny dla użytkownika komunikat o błędzie, który ma pomóc w debugowaniu. |
Jeżeli status HTTP dla żądania wynosi 200, obiekt JSON błędu nie zostanie zwrócony i można bezpiecznie założyć, że żądanie zasadniczo się powiodło.
Niektóre biblioteki klienta HTTP zgłaszają wyjątki dla statusów HTTP w zakresie 400
-599
. Wyjątki te trzeba przechwycić i odpowiednio obsłużyć.
HTTP Status | Znaczenie |
---|---|
200 -299
|
Powodzenie |
400 -499
|
Wystąpił problem z informacją przekazaną w żądaniu (np. brakowało parametru). Przejrzyj komunikat o błędzie aby ustalić jak go rozwiązać. |
500 -599
|
There's been a Vectorizer.AI internal error. Zaczekaj chwilę i spróbuj ponownie, a jeśli problem nie zniknie, skontaktuj się z nami e-mailem. |
Przykładowa odpowiedź na błąd
{ "error" : { "status" : 400, "code" : 1006, "message" : "Failed to read the supplied image. " } }
Ostatnie błędy interfejsu API są wyświetlane na stronie konta dla wygody debugowania.
Istnieje również lista wszystkich odpowiedzi na błędy zwracanych przez API.
Oto niestandardowe nagłówki odpowiedzi, których używamy:
Nagłówek | Opis |
---|---|
X-Image-Token
|
Returned when your vectorization request has
|
X-Receipt
|
Zwraca się po pobraniu wyniku produkcji przy użyciu podglądu tokenu obrazu. Może być używany do pobierania dodatkowych formatów (np. SVG, PNG, PDF itp.) wyniku z szybkością formatu pobierania zamiast szybkości podglądu aktualizacji. |
X-Credits-Calculated
|
Wrócił z prośbami testowymi, aby pokazać koszty, które zostałyby poniesione, gdyby było to regularne żądanie. |
X-Credits-Charged
|
Zwrócony ze wszystkimi prośbami o pokazanie poniesionych kosztów. Zawsze 0 dla próśb testowych. |
POST
https://api.vectorizer.ai/api/v1/vectorize
Aby wektoryzować obraz, wykonaj standardowe przekazanie pliku HTTP POST. Pamiętaj, że przy przekazywaniu plików binarnych wymagany typ zawartości to multipart/form-data
.
Poniższa tabela określa wszystkie parametry API w działającej i gotowej do wypróbowania formie. Każdemu parametrowi towarzyszy krótki opis, ale pamiętaj aby zapoznać się ze szczegółową Dokumentacją opcji plików wyjściowych.
POST
https://api.vectorizer.ai/api/v1/download
Ten punkt końcowy umożliwia:
Pobierz pełny wynik produkcji po wywołaniu interfejsu API podglądu.
We include an X-Receipt
header in the response so you can download additional output formats at the reduced download format rate afterwards.
Pobierz wiele formatów wyjściowych dla tego samego obrazu i opcji przetwarzania przy zmniejszonej szybkości pobierania i bez konieczności wektoryzacji ich wszystkich od podstaw.
POST
https://api.vectorizer.ai/api/v1/delete
Images vectorized with policy.retention_days > 0
are stored for the requested time period and deleted automatically shortly thereafter.
Zwykle nie ma potrzeby wywoływania tego punktu końcowego. Jest on zapewniony, abyś mógł usuwać obrazy przed upływem okresu przechowywania. Wczesne usunięcie obrazu nie daje zwrotu kosztów za pozostałe dni przechowywania.
Atrybuty odpowiedzi |
|
---|---|
success |
|
Przykładowa odpowiedź
{ "success" : true }
GET
https://api.vectorizer.ai/api/v1/account
Pobierz ogólne informacje o swoim koncie, takie jak status subskrypcji i ilość posiadanych środków.
Parametry |
|
---|---|
Brak |
Atrybuty odpowiedzi |
|
---|---|
subscriptionPlan |
Plan subskrypcji, z którego obecnie korzystasz, albo "brak". |
subscriptionState |
Status twojej aktualnej subskrypcji ("aktywna" albo "zaległa") lub jeżeli subskrypcja nie istnieje - "zakończono". |
credits |
Liczba kredytów API pozostałych na Twoim koncie. 0, jeśli nie jest aktualnie subskrybowany lub subskrybowany do planu innego niż API. Może być ułamkowy, więc pamiętaj, aby przeanalizować jako podwójny. |
Wypróbuj to
Nazwa użytkownika = Identyfikator API, Hasło = Tajne API
cURL
$ curl "https://api.vectorizer.ai/api/v1/account" \ -u vkyc67kqa27yidd:[secret]
Przykładowa odpowiedź
{ "subscriptionPlan" : "none", "subscriptionState" : "ended", "credits" : 0 }
Data | Zmień |
---|---|
4 lis 2024 |
Added processing.shapes.min_area_px .
|
1 paź 2024 | Dodano chatbota AI, aby pomóc w integracji z interfejsem API. |
23 wrz 2024 | Znacznie rozszerzono interfejs API, aby umożliwić więcej trybów działania. Dodano tokeny graficzne, pokwitowania, nagłówki opłat za połączenie oraz punkty końcowe pobierania i usuwania. |
11 cze 2024 |
Dodano processing.palette
|
4 mar 2024 | Dodano sekcję dotyczącą limitu czasu. |
24 sty 2024 | Dodano punkt końcowy stanu konta. Dodano ostatnie błędy API na stronie Konto. Dodano listę wszystkich odpowiedzi na błędy API. |
16 sty 2024 | Udokumentowano błąd obiektu JSON. |
3 paź 2023 |
Clarified that output.gap_filler.enabled=true leads to more colors in the result than requested in processing.max_colors .
|
20 wrz 2023 |
Dodano mode
|
1 sie 2023 |
Dodano kompleksową grupę opcji rozmiarów pliku wyjściowego obejmującą następujące opcje: 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 oraz output.size.output_dpi . Dodano grupę opcji wyjściowej mapy bitowej z jedną opcją: output.bitmap.anti_aliasing_mode .
|
7 cze 2023 |
Dodano processing.max_colors
|
31 maj 2023 | Znacznie rozszerzono parametry interfejsu API. Zaktualizowano punkt końcowy interfejsu API. |
10 mar 2023 | Początkowe wydanie. |