Vectorizer.AI offre un API di traccia bitmap completo. L'API traccia i pixel ai vettori automaticamente e con una fedeltà best-in-class.
POSTA un'immagine bitmap e ottiene un risultato vettorializzato
$ curl https://it.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://it.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://it.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://it.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://it.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://it.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://it.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://it.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://it.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://it.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://it.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://it.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://it.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://it.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
Abbiamo creato un ChatGPT personalizzato che ti può aiutare con la tua integrazione API. Può rispondere a domande sulla documentazione API, e fornisce un codice di esempio nella tua lingua preferita adattato al tuo caso di utilizzo.
Chatta on il Chatbot API Vectorizer.AI
Il chatbot è in beta e fa errori. Controlla le risposte e chiedigli di modificare il codice per correggere errori e omissioni.
L'API è previsto per supportare molti usi-casi diversi. Qui di seguito sono elencati i più comuni:
Usa l'endpoint Vettorializza e i codici di esempio qui sopra.
Se devi effettuare molte chiamate API per finalizzare una vendita, puoi usare le panoramiche a costo inferiore fino a quando non convinci il cliente.
Usa l'endpoint Vettorializzacon mode=preview
e policy.retention_days > 0
per ottenere l'anteprima, assicurandoti di conservare l'Image Token restituito nell'intestazione di risposta X-Image-Token
Una volta convinto il cliente, usa l'endpoint Scarica con l'Image Token per scaricare il risultato completo.
Facoltativo: se hai bisogno di altri formati di risultato (es. PNG, PDF, ecc), assicurati di conservare la Ricevuta restituita nell'intestazione di risposta scaricamento X-Receipt
. Quindi utilizza l'endpoint Scarica con l'Image Token e la Ricevuta per scaricare i formati rimanenti.
Utilizza l'endpoint Vettorializza con policy.retention_days > 0
per ottenere il primo risultato, assicurandoti di conservare l'Image Token restituito nell'intestazione di risposta X-Image-Token
.
Utilizza l'endpoint Scarica con l'Image Token per scaricare gli altri formati.
Utilizza l'endpoint Vettorializza con policy.retention_days > 0
per ottenere il primo risultato, assicurandoti di conservare l'Image Token restituito nell'intestazione di risposta X-Image-Token
.
Utilizza l'endpoint Vettorializza con l'Image Token per ripetere con le rimanenti opzioni di elaborazione che desideri.
In alternativa, puoi elaborare ciascuna immagine individualmente senza preoccuparti dell'Image Token. L'Image Token ti fa risparmiare un po' di larghezza banda e latenza.
Azione | Crediti | Descrizione |
---|---|---|
Test | 0.00 |
L'integrazione e la prova dell'API sono gratuite, non occorre un abbonamento.
Usa semplicemente Pupi valutare la qualità del risultato usando la Web App interattiva alla prima pagina. |
Anteprima | 0.20 |
Offriamo l'anteprima dei risultati per consentirti di mostrare agli utenti finali il prodotto prima dell'acquisto. Le anteprime sono immagini PNG del quadruplo delle dimensioni del tuo input, e hanno una filigrana discreta.
Usa |
Vettorializza | 1.00 | Vettorializza un'immagine bitmap per un'immagine vettoriale. |
Anteprima upgrade | 0.90 | Scarica il risultato di produzione dopo la panoramica della chiamata API. Meno caro in rapporto alla vettorializzazione da zero. |
Formato scaricamento | 0.10 | Scarica un altro formato (es. SVG, PNG, PDF, ecc.) del risultato. Meno caro in rapporto alla vettorializzazione da zero. |
Giorno di archiviazione | 0.01 | Il prezzo al giorno per l'archiviazione di un risultato oltre il primo giorno, che è gratuito. |
Consulta la pagina prezzi per i piani di abbonamento.
L'API utilizza l'autenticazione di base HTTP standard. Tutte le richieste all'API devono essere effettuate sull'HTTPS e includere le tue credenziali API, con l'ID API come utente e il segreto API come password.
La tua libreria client HTTP deve supportare l'Indicazione nome server (SNI) per fare richieste con successo. Se ricevi strani errori di handshake, probabilmente dipende da questo.
L'uso dell'API è a velocità limitata con concessioni generose e nessun limite superiore fisso.
Durante l'operazione normale gestita dall'utente finale non dovresti trovare limiti di velocità in quanto l'uso tende a fluire e rifluire in un modo che il servizio gestisce agilmente.
Tuttavia, per lavori in batch raccomandiamo di iniziare con almeno 5 thread, aggiungendo 1 nuovo thread ogni 5 minuti fino a raggiungere il livello di parallelismo desiderato. Ti pregheremmo di contattarci prima di iniziare se hai bisogno di oltre 100 thread simultanei.
Se inoltri troppe richieste inizierai a ricevere risposte 429 Too Many Requests
. In tal caso dovresti applicare un backoff lineare: alla prima risposta di questo tipo, attendi 5 secondi prima di inoltrare la richiesta successiva. Alla seconda risposta 429 consecutiva, attendi 2*5=10 secondi prima di inoltrare la richiesta successiva. Alla terza attendi 3*5=15 secondi, ecc.
Puoi reimpostare il contatore di backoff dopo una richiesta riuscita, e dovresti applicare il backoff per thread (vale a dire i thread dovrebbero essere indipendenti l'uno dall'altro).
Sebbene le richieste API siano normalmente completate in pochi secondi, è possibile che durante picchi di carico occorra più tempo per l'elaborazione.
Per assicurarti che la tua libreria clienti non termini troppo presto le richieste API dovrebbero essere configurate con un timeout inattività di almeno 180 secondi.
Usiamo stati HTTP convenzionali per indicare se una richiesta API riesce o meno, includendo importanti informazioni di errore nell'Errore Oggetto JSON restituito.
Cerchiamo di restituire sempre un Errore Oggetto JSON con qualsiasi richiesta problematica. Tuttavia, in teoria è sempre possibile che vi siano errori interni del server che portano a una risposta non di errore JSON.
Attributi |
|
---|---|
status | Lo status HTTP della risposta, ripetuto qui come ausilio per il debug. |
code | Codice errore interno Vectorizer.AI. |
message | Messaggio di errore leggibile, previsto per aiutare con il debug. |
Se lo status HTTP per la tua richiesta è 200 non sarà restituito un Errore Oggetto JSON, e puoi presumere con sicurezza che la richiesta in senso lato è riuscita.
Alcune librerie client HTTP generano eccezioni per gli stati HTTP nel range 400
-599
. Dovrai catturare queste eccezioni e gestirle idoneamente.
HTTP Status | Significato |
---|---|
200 -299
|
Operazione riuscita |
400 -499
|
Esiste un problema con le informazioni fornite nella richiesta (per esempio un parametro mancante). Controlla il messaggio di errore per determinare come risolverlo. |
500 -599
|
Si è verificato un errore Vectorizer.AI interno. Attendi un momento quindi riprova, e se il problema persiste inviaci una email. |
Esempio di risposta di errore
{ "error" : { "status" : 400, "code" : 1006, "message" : "Failed to read the supplied image. " } }
I recenti errori API sono elencati nella pagina del tuo account per facilitare il debug.
C'è anche un elenco di tutte le risposte di errore restituite dall'API.
Ecco le intestazioni di risposta personalizzate che usiamo:
Intestazione | Descrizione |
---|---|
X-Image-Token
|
Restituita quando la tua richiesta di vettorializzazione ha
|
X-Receipt
|
Restituito quando scarichi un risultato di produzione usando un Image Token precedente. Può essere usato per scaricare altri formati (es. SVG, PNG, PDF, etc.) del risultato al prezzo di formato scaricamento ridotto in rapporto al prezzo di upgrade panoramica. |
X-Credits-Calculated
|
Restituito con le richieste di test per mostrare il costo che sarebbe stato addebitato nel caso di una richiesta regolare. |
X-Credits-Charged
|
Restituito con tutte le richieste per mostrare il costo addebitato. Sempre 0 per le richieste di test. |
POST
https://api.vectorizer.ai/api/v1/vectorize
Per vettorializzare un'immagine, devi eseguire un caricamento file POST HTTP standard. Tieni presente che il Contenuto-Tipo deve essere multipart/form-data
quando carichi file binari.
La tabella qui di seguito include tutti i parametri API in un formato di lavoro provalo ora. Ciascun parametro include una breve descrizione, ma assicurati di consultare la documentazione dettagliata sulle Opzioni di output.
POST
https://api.vectorizer.ai/api/v1/download
Questo endpoint consente di:
Scaricare il risultato di produzione completo dopo una panoramica della chiamata API.
Includiamo un'intestazione X-Receipt
nella risposta in modo che tu possa scaricare altri formati di output al prezzo di formato di scaricamento ridotto in seguito.
Scarica diversi formati di output per la stessa immagine e utilizza varie opzioni di elaborazione a un prezzo ridotto e senza vettorializzare tutto da zero.
POST
https://api.vectorizer.ai/api/v1/delete
Immagini vettorializzate con policy.retention_days > 0
sono conservate per il periodo di tempo richiesto ed eliminate automaticamente subito dopo.
In genere non è necessario chiamare questo endpoint. Viene fornito in modo che tu possa eliminare immagini prima della scadenza del periodo di conservazione. L'eliminazione anticipata di un'immagine non risulta in un rimborso dei giorni di archiviazione rimasti.
Attributi della risposta |
|
---|---|
success |
|
Esempio di risposta
{ "success" : true }
GET
https://api.vectorizer.ai/api/v1/account
Ottieni informazioni di base sul tuo account, come lo status del tuo abbonamento e il numero di crediti rimanenti.
Parametri |
|
---|---|
Nessuna |
Attributi della risposta |
|
---|---|
subscriptionPlan |
Il piano a cui sei attualmente abbonato, o 'nessuno'. |
subscriptionState |
Lo stato del tuo attuale abbonamento ('attivo' o 'scaduto') o 'terminato' se non sei abbonato. |
credits |
Il numero di crediti API rimasti nel tuo account. 0 se non sei attualmente abbonato, o sei abbonato a un piano non-API. Può essere frazionario, assicurati di analizzare come un Doppio. |
Nome utente = Id API, Password = Segreto API
cURL
$ curl "https://api.vectorizer.ai/api/v1/account" \ -u vkyc67kqa27yidd:[secret]
Esempio di risposta
{ "subscriptionPlan" : "none", "subscriptionState" : "ended", "credits" : 0 }
Data | Modifica |
---|---|
4 nov 2024 |
Aggiunto processing.shapes.min_area_px .
|
1 ott 2024 | Aggiunta di un chatbot AI come ausilio nell'integrazione con l'API. |
23 set 2024 | API notevolmente ampliato per consentire altre modalità di utilizzo. Aggiunti Image Token, Ricevute, intestazioni di addebito per chiamata, e gli endpoint Scaricamento ed Eliminazione. |
11 giu 2024 |
Aggiunto processing.palette
|
4 mar 2024 | Aggiunta sezione sui timeout. |
24 gen 2024 | Aggiunto endpoint Stato Account. Errori recenti API aggiunti alla pagina Account. Aggiunto Elenco di tutte le risposte di errore dell'API. |
16 gen 2024 | Errore JSON oggetto documentato. |
3 ott 2023 |
Chiarito che output.gap_filler.enabled=true porta a più colori nel risultato di quanto richiesto in processing.max_colors .
|
20 set 2023 |
Aggiunto mode
|
1 ago 2023 |
Aggiunto gruppo di opzioni di dimensioni di output con funzioni complete con le seguenti opzioni: 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 output.size.output_dpi . Aggiunto gruppo di opzioni di output bitmap con un'opzione: output.bitmap.anti_aliasing_mode .
|
7 giu 2023 |
Aggiunto processing.max_colors
|
31 mag 2023 | Ha ampliato notevolmente i parametri API. Endpoint API aggiornato. |
10 mar 2023 | Release iniziale. |