API vettorializzazione immmagine

Vectorizer.AI offre un API di traccia bitmap completo. L'API traccia i pixel ai vettori automaticamente e con una fedeltà best-in-class.

Ottieni chiave API

Avvio rapido

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

Livelli di prezzi

L'integrazione e la prova dell'API è gratuita, non occorre un abbonamento.

Usa semplicemente mode=test per lo sviluppo. Pupi valutare la qualità del risultato usando la Web App interattiva alla prima pagina.

I risultati della produzione richiedono un abbonamento e sono 1,00 credito ciascuno.

Offriamo anche 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, hanno una filigrana discreta, e costano 0,20 crediti ciascuna.

Usa semplicemente mode=preview per un'anteprima del risultato.

Consulta la pagina prezzi per i piani di abbonamento.

Autenticazione e Sicurezza

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.

Limitazione di velocità

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).

Timeout

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.

Errore Oggetto JSON

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

statusLo status HTTP della risposta, ripetuto qui come ausilio per il debug.
codeCodice errore interno Vectorizer.AI.
messageMessaggio 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 StatusSignificato
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.

Vettorializza 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.

Parametri

L'immagine inserita deve essere fornita come:


Binario

Un file binario.


Stringa

Stringa codificata base64. La stringa può essere di 1 megabyte massimo.


Stringa

Un URL da recuperare ed elaborare.

Deve essere un file .bmp, .gif, .jpeg, .png, o .tiff.

Le dimensioni massime per il caricamento dell'immagine (= larghezza × altezza) sono 33.554.432 pixel, che sono ridotte a input.max_pixels.


Num, default: production
Value Processing Mode Credits
production

Questa modalità è prevista per l'uso in produzione e tutti i parametri sono supportati.

1.00
preview

Questa modalità è prevista per consentirti di mostrare all'utente finale il prodotto prima dell'acquisto.

Produce un risultato PNG del quadruplo delle dimensioni con una filigrana discreta, ignorando parametri contraddittori.

0.20
test

Questa modalità è prevista per l'uso da parte dei developer durante l'integrazione con il servizio. Tutti i parametri sono supportati, ma è prevista una filigrana notevole.

I risultati delle prove sono gratuiti e non richiedono un abbonamento attivo,, in modo da rendere possibile l'integrazione gratuita con il servizio.

Gratutito

Intero, 100 a 3145828, default: 2097252

Le dimensioni massime di input dell'immagine (= larghezza × altezza in pixel). Immagini più grandi saranno ridotte a queste dimensioni prima dell'elaborazione.


Intero, 0 a 256, default: 0

Il massimo numero di colori da usare per il risultato.

0 significa illimitato. 1 e 2 significano entrambi due colori, per esempio bianco e nero. N>=2 significa quel numero di colori.

Va notato che se il output.gap_filler.enabled=true (default) il risultato conterrà anche miscele dei colori selezionati. Disattiva il gap filler per ottenere un risultato che contenga solamente i colori selezionati.


Num, default: svg

Formato file output.

Opzioni SVG:


Num, default: svg_1_1

Specifica l'attributo della versione SVG nel tag SVG. Dettagli


Booleano, default: false

Se includere gli attributi delle dimensioni dell'immagine nel tag SVG. Quando true i visualizzatori in genere produrranno l'SVG a una velocità fissa. Quando false i visualizzatori in genere consentono a SVG la riduzione in scala per adattarsi allo spazio disponibile. Dettagli


Booleano, default: false

Quando true disattiviamo le opzioni che Adobe Illustrator non può importare. Dettagli

Opzioni DFX:


Num, default: lines_and_arcs

I lettori DFX variano molto in termini di capacità. Questa opzione ti consente di limitare l'output alle primitive di disegno che il tuo lettore DFX supporta effettivamente. Dettagli

Opzioni bitmap:


Num, default: anti_aliased
Value Anti-Aliasing Mode
anti_aliased I pixel lungo il confine fra le forme hanno i loro colori fusi secondo la frazione dell'area dei pixel coperta da ciascuna forma.
aliased Ai pixel viene assegnato il colore della forma che contiene il centro geometrico del pixel.

Num, default: fill_shapes

Specifica come desideri tracciare o riempire l'output. Esiste una differenza sottile fra tracciare le forme e tracciare i bordi fra le forme. Consulta la documentazione dettagliata per una spiegazione


Num, default: cutouts

Determina se le forme sono collocate in ritagli nelle forme qui sotto (cutouts) o se sono sovrapposte l'una sull'altra (stacked). Dettagli


Num, default: none
Value Shape grouping
none Nessun raggruppamento
color Per colore, interagisce con output.shape_stacking
parent Per forma contenitore
layer Per livello di ordine disegno
Dettagli

Booleano, default: false

Appiattisci cerchi, ellissi, rettangoli, triangoli e stelle identificati in curve ordinarie. Dettagli

Curve:


Booleano, default: true

Se consentire le Curve di Bézier quadratiche. Dettagli


Booleano, default: true

Se consentire le Curve di Bézier cubiche. Dettagli


Booleano, default: true

Se consentire gli Archi circolari. Dettagli


Booleano, default: true

Se consentire gli Archi ellittici. Dettagli


Mobile, 0.001 a 1.0, default: 0.1

Distanza massima in pixel fra una curva e la riga vicina. Dettagli

Gap Filler:


Booleano, default: true

Se lavorare attorno alla riga bianca che produce bug comuni nei visualizzatori vettoriali. Dettagli


Booleano, default: false

Se tagliare i tratti del gap filler. Quando output.shape_stacking=stacked taglia o usa tratti senza scala. Dettagli


Booleano, default: true

Se usare tratti di gap filler senza scala. Quando output.shape_stacking=stacked taglia o usa tratti senza scala. Dettagli


Mobile, 0.0 a 5.0, default: 2.0

Larghezza dei tratti del gap filler. Dettagli

Stile di tratti quando output.draw_style è stroke_shapes o stroke_edges


Booleano, default: true

Se usare tratti senza scala. Dettagli


Booleano, default: false

Se usare il colore di override, o il colore stimato della forma. Dettagli


Formato: #RRGGBB, es. #FF00FF, default: #000000

Colore di override. Dettagli


Mobile, 0.0 a 5.0, default: 1.0

Ampiezza del tratto. Dettagli

Dimensioni output:


Mobile, 0.0 a 1000.0

Fattore di scala uniforme. Se specificato, ha la precedenza su output.size.width e output.size.height.


Mobile, 0.0 a 1.0E12

Larghezza in unità specificate da output.size.unit. Se è specificata solo la larghezza o l'altezza, l'altra dimensione viene calcolata automaticamente per mantenere il rapporto aspetto.


Mobile, 0.0 a 1.0E12

Altezza in unità specificate da output.size.unit. Se è specificata solo la larghezza o l'altezza, l'altra dimensione viene calcolata automaticamente per mantenere il rapporto aspetto.


Num, default: none

Le unità di misura per la larghezza e l'altezza. Di queste, pt, in, cm, e mm sono unità fisiche, e none e px sono unità non fisiche. Queste distinzioni interagiscono con output.size.input_dpi e output.size.output_dpi.


Num, default: preserve_inset

Valore Regola della scala
preserve_inset Scala uniforme per adattare la dimensione più stretta, in modo che non vi sia fuoriuscita ma spazio vuoto nell'altra dimensione
preserve_overflow Scala uniforme per adattare la dimensione meno stretta, con espansione nella dimensione più stretta
stretch Scala non uniforme per adattare la larghezza e altezza specificate
Per l'una o l'altra preserve opzione, la posizione nella dimensione non limitata è controllata da output.size.align_x o output.size.align_y.


Mobile, 0.0 a 1.0, default: 0.5

Allineamento orizzontale per output.size.aspect_ratio = preserve_inset o preserve_overflow.

Valore Allineamento orizzontale
0.0 Allineato a sinistra
0.5 Centrato orizzontalmente
1.0 Allineato a destra
Può essere un valore qualsiasi fra 0.0 e 1.0.


Mobile, 0.0 a 1.0, default: 0.5

Allineamento verticale per output.size.aspect_ratio = preserve_inset o preserve_overflow.

Valore Allineamento verticale
0.0 Allineato in alto
0.5 Centrato verticalmente
1.0 Allineato in fondo
Può essere un valore qualsiasi fra 0.0 e 1.0.


Mobile, 1.0 a 1000000.0

I DPI dell'immagine di input sono letti dal file quando disponibile. Questo parametro ti consente di ignorare quel valore. Il valore che ne risulta viene usato per calcolare le dimensioni fisiche dell'immagine di input, che viene usata per calcolare le dimensioni dell'output se sono specificate unità fisiche per l'output, ma non una larghezza o altezza esplicita.


Mobile, 1.0 a 1000000.0

DPI dell'immagine di output. Viene usato per calcolare le dimensioni pixel dell'output bitmap quando sono specificate unità fisiche.

Stato conto 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. Potrebbe essere frazionale, assicurati di analizzare come un Doppio.

Nome utente = Id API, Password = Segreto API

cURL

$ curl "https://api.vectorizer.ai/api/v1/account" \
 -u 123:[secret]

Esempio di risposta

{
  "subscriptionPlan" : "none",
  "subscriptionState" : "ended",
  "credits" : 0
}

Changelog API

DataModifica
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.scaleoutput.size.widthoutput.size.heightoutput.size.unitoutput.size.aspect_ratiooutput.size.align_xoutput.size.align_youtput.size.input_dpioutput.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.
Ottieni chiave API