Vectorizer.AI propose une API de conversion bitmap complète. L'API convertit les pixels en vecteurs de manière entièrement automatique et avec une fidélité de pointe.
POSTEZ une image bitmap et obtenez un résultat vectorisé :
$ curl https://fr.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://fr.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://fr.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://fr.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://fr.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://fr.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://fr.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://fr.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://fr.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://fr.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://fr.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://fr.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://fr.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://fr.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
L'intégration et le test de l'API sont gratuits, aucun abonnement requis.
Utilisez simplement mode=test
pour le développement. Vous pouvez évaluer la qualité des résultats à l’aide de l’application Web interactive sur la première page.
Les résultats en production nécessitent un abonnement et coûtent 1,00 crédit chacun.
Nous proposons également des résultats en prévisualisation que vous pouvez montrer à vos utilisateurs finaux avant qu'ils effectuent un achat.
Les prévisualisations sont des images PNG quatre fois plus grandes que votre entrée et accompagnées d'un filigrane discret. Elles coûtent 0,20crédit chacune.
Utilisez simplement mode=preview
pour obtenir une prévisualisation.
Veuillez consulter la page des prix pour voir les plans d'abonnement.
L'API utilise une authentification d'accès de base HTTP standard. Toutes les requêtes vers l'API doivent être effectuées via HTTPS et inclure vos identifiants API, l'identifiant API étant l'utilisateur et le secret API étant le mot de passe.
Votre bibliothèque des clients http doit prendre en charge le SNI (Server Name Indication) pour que les requêtes puissent être adressées. Si vous recevez d'étranges erreurs de protocole d'accord (handshake), c'est très probablement le cas.
Le taux d'utilisation de l'API est limité avec des allocations généreuses et aucune limite supérieure stricte.
Au cours d'un fonctionnement normal axé sur l'utilisateur final, il est peu probable que vous rencontriez une limitation de débit, car l'utilisation a alors tendance à refluer et à s'écouler d'une manière que le service gère avec fluidité.
Cependant, pour les travaux par lots, nous vous recommandons de commencer avec au plus 5 fils, en ajoutant 1 nouveau fil toutes les 5 minutes jusqu'à ce que vous ayez atteint le niveau de parallélisme souhaité. Veuillez nous contacter avant de commencer si vous avez besoin de plus de 100 fils simultanés.
Si vous soumettez trop de requêtes, vous commencerez à recevoir des réponses 429 Too Many Requests
. Dans ce cas, vous devrez appliquer un retrait linéaire : lorsque vous recevez la première réponse de ce type, attendez 5 secondes avant de soumettre la requête suivante. Lorsque vous recevez la deuxième réponse 429 consécutive, attendez 2*5=10 secondes avant de soumettre la requête suivante. À la troisième réponse, attendez 3*5=15 secondes, et ainsi de suite.
Vous pouvez réinitialiser le compteur de recul après une requête réussie et vous devez appliquer le recul fil par fil (c'est-à-dire que les fils doivent fonctionner indépendamment les uns des autres).
Bien que les requêtes API soient normalement exécutées en quelques secondes, des temps de traitement plus longs peuvent survenir lors de pics de charge transitoires.
Pour garantir que votre bibliothèque cliente ne met pas fin prématurément aux requêtes API, elle doit être configurée avec un délai d'inactivité d'au moins 180 secondes.
Nous utilisons des statuts HTTP classiques pour indiquer le succès ou l'échec d'une requête API, et incluons d'importantes informations sur l'Objet JSON d'erreur retourné.
Nous nous efforçons de toujours renvoyer un Objet JSON d'erreur en cas de requête problématique. Des erreurs de serveur internes pouvant causer des messages d'erreur non JSON sont toutefois théoriquement possibles.
Attributs |
|
---|---|
status | Le statut HTTP de la réponse, répété ici pour faciliter l'élimination des erreurs. |
code | Code d'erreur interne Vectorizer.AI. |
message | Message d'erreur interprétable par l'utilisateur, destiné à faciliter l'élimination des erreurs. |
Si le statut HTTP de votre requête est 200, aucun Objet JSON d'erreur ne sera retourné, et vous pouvez présumer que la requête dans son ensemble a réussi.
Certaines bibliothèques de clients HTTP déclenchent des exceptions pour les états HTTP dans la plage 400
599
. Vous devez repérer ces exceptions et les traiter adéquatement.
HTTP Status | Signification |
---|---|
200 -299
|
Succès |
400 -499
|
Un problème est survenu avec les informations fournies dans la requête (un paramètre peut être manquant, par exemple). Veuillez revoir le message d'erreur pour déterminer la manière de le résoudre. |
500 -599
|
Une erreur interne Vectorizer.AI s'est produite. Patientez un instant puis réessayez. Veuillez nous envoyer un e-mail si le problème persiste. |
Exemple de message d'erreur
{ "error" : { "status" : 400, "code" : 1006, "message" : "Failed to read the supplied image. " } }
Les erreurs API récentes sont répertoriées sur la page de votre compte pour faciliter le débogage.
Il y a également une liste de toutes les réponses d'erreur retournées par l'API.
POST
https://api.vectorizer.ai/api/v1/vectorize
Pour vectoriser une image, vous effectuez le téléchargement d'un fichier HTTP POST standard. N'oubliez pas que le type de contenu doit être multipart/form-data
pour le téléchargement en amont de fichiers binaires.
Le tableau ci-dessous présente tous les paramètres de l'API sous une forme d'essai fonctionnel. Chaque paramètre a une brève description, mais assurez-vous de consulter la documentation détaillée sur les options de sortie.
GET
https://api.vectorizer.ai/api/v1/account
Récupérez des informations de base sur votre compte, telles que le statut de votre abonnement et le nombre de crédits restants.
Paramètres |
|
---|---|
Aucune |
Attributs de réponse |
|
---|---|
subscriptionPlan |
Le plan d'abonnement auquel vous êtes actuellement abonné(e) ou « aucun ». |
subscriptionState |
Le statut de votre abonnement actuel (« actif » ou « échu ») ou « terminé » si vous n'êtes pas abonné(e). |
credits |
Le nombre de crédits API restants sur votre compte. 0 si vous n'êtes pas actuellement abonné(e), ou si vous êtes abonné(e) à un plan non API. Peut être fractionnaire ; veillez donc l'analyser comme un Double. |
Faites un essai
Nom d'utilisateur = Id API, Mot de passe = Secret API
cURL
$ curl "https://api.vectorizer.ai/api/v1/account" \ -u 123:[secret]
Exemple de réponse
{ "subscriptionPlan" : "none", "subscriptionState" : "ended", "credits" : 0 }
Date | Modifier |
---|---|
11 juin 2024 |
processing.palette ajouté.
|
4 mars 2024 | Ajout d'une section sur les délais d'attente. |
24 janv. 2024 | Ajout du point de terminaison État du compte. Ajout des erreurs API récentes à la page du Compte. Ajout d'une liste de toutes les réponses d'erreur API. |
16 janv. 2024 | Objet JSON d'erreur documenté. |
3 oct. 2023 |
Clarification que output.gap_filler.enabled=true génère davantage de couleurs dans le résultat que ce qui est demandé dans processing.max_colors .
|
20 sept. 2023 |
mode ajouté.
|
1 août 2023 |
Ajout d'un groupe d'options de taille de sortie avec les options suivantes : 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 et output.size.output_dpi . Ajout d'un groupe d'options de sortie bitmap avec une option : output.bitmap.anti_aliasing_mode .
|
7 juin 2023 |
processing.max_colors ajouté.
|
31 mai 2023 | Élargissement considérable des paramètres de l'API. Point de terminaison d'API mis à jour. |
10 mars 2023 | Première version. |