Vectorizer.AI ofrece una API completa para trazar mapas de bits. La API convierte píxeles en vectores de manera completamente automática y con fidelidad de la más alta calidad.
Cargue una imagen de mapa de bits y obtenga un resultado vectorizado:
$ curl https://es.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://es.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://es.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://es.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://es.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://es.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://es.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://es.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://es.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://es.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://es.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://es.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://es.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://es.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
Creamos un ChatGPT personalizado que puede ayudarle con su intergración de la API. Puede contestar preguntas sobre la documentación de la API y proporcionar código de muestra en su idioma preferido adaptado al uso que le dará.
Chatee con el chatbot de la API de Vectorizer.AI.
El chatbot está en su versión beta y comete errores. Verifique las respuestas y pídale que revise el código para corregir los errores y las omisiones.
La API es compatible con muchos diferentes casos de uso. Estas son algunas comunes:
Use el punto de conexión Vectorizar y los ejemplos de código de arriba.
Si necesita hacer muchas llamadas de API antes de lograr una venta, puede usar las vistas previas de costo más bajo hasta que logre conseguir al cliente.
Use el punto de conexión Vectorizar con mode=preview
y con policy.retention_days > 0
para obtener la vista previa, asegurándose de conservar el Token de la imagen devuelto con el encabezado de la raspiest X-Image-Token
.
Después de la conversión, use el punto de conexión Descargar con el Token de la imagen para descargar el resultado completo.
Opcional: si necesita el resultado en formatos adicionales (p. ej. PNG, PDF, etc.), asegúrese de conservar el Recibo devuelto en el encabezado de respuesta de la descarga X-Receipt
. Luego use el punto de conexión Descargar con el Token de la imagen y con el Recibo para descargar los demás formatos.
Use el punto de conexión Vectorizar con policy.retention_days > 0
para obtener el primer resultado y asegúrese de conservar el Token de imagen devuelto en el encabezado de respuesta X-Image-Token
.
Use el punto de conexión Descargar con el Token de la imagen para descargar los otros formatos.
Use el punto de conexión Vectorizar con policy.retention_days > 0
para obtener el primer resultado y asegúrese de conservar el Token de imagen devuelto en el encabezado de respuesta X-Image-Token
.
Use el punto de conexión Vectorizar con el Token de la imagen para repetirlo con las otras opciones de procesamiento que necesita.
Alternativamente, puede procesar cada imagen individualmente y no preocuparse del Token de la imagen. El Token de la imagen le ahorra algo de ancho de banda y espera.
Acción | Créditos | Descripción |
---|---|---|
Pruebas | 0.00 |
La integración y la prueba de la API son gratis. No requieren suscripción.
Use Puede ver la calidad del resultado usando la aplicación Web interactiva en la página inicial. |
Vista previa | 0.20 |
Ofrecemos una vista previa del resultado que puede mostrar a los usuarios finales antes de que ellos paguen. Las vistas previas son imágenes en PNG cuatro veces más grandes que la imagen original y tienen una marca de agua discreta.
Use |
Vectorizar | 1.00 | Convierta una imagen de mapa de bits en una imagen de vectores. |
Ver planes | 0.90 | Descargue el resultado de la producción después de una petición de vista previa de la API. Descontado, en comparación con la conversión en vectores desde cero. |
Formato de descarga | 0.10 | Descargue otro formato (p. ej. SVG, PNG, PDF, etc.) del resultado. Descontado, en comparación con la conversión en vectores desde cero. |
Días de almacenamiento | 0.01 | Precio por día de almacenamiento de un resultado después del primer día, que es gratis. |
Consulte la página de créditos para ver los planes de suscripción.
La API usa autenticación de acceso básico a HTTP estándar. Todas las peticiones a la API se harán en HTTPS e incluirán su información de acceso a la API, donde la Id de la API es el usuario y el código secreto de la API es la contraseña.
Su biblioteca cliente de http debe ser compatible con la Indicación de nombre del servidor (SNI) para poder hacer peticiones. Si tiene errores raros de protocolo de enlace, esta es la razón más probable.
El uso de la API tiene limitaciones de velocidad de respuesta con amplias asignaciones sin límite superior.
Durante la operación normal impulsada por el usuario es improbable que vea límites de la velocidad de respuesta ya que en ese caso el uso tiende a fluir de una manera que el servicio maneja muy bien.
Sin embargo, para los procesos en lotes recomendamos que comience con 5 hilos máximo y puede agregar 1 hilo nuevo cada 5 minutos hasta que llegue al nivel deseado de paralelismo. Si necesita más de 100 hilos actuales, comuníquese con nosotros antes de comenzar.
Si envía demasiadas peticiones comenzará a recibir la respuesta 429 Too Many Requests
. Si esto sucede, debe aplicar una espera lineal: cuando reciba la primera respuesta de ese tipo, espere 5 segundos antes de enviar la siguiente petición. Cuando reciba la segunda respuesta 429 consecutiva, espere 2*5=10 segundos antes de enviar la siguiente petición. Cuando reciba la tercera respuesta, espere 3*5=15, etc.
Puede restablecer el contador de espera después de una petición exitosa y deberá poder aplicar la espera por cada hilo (es decir, los hilos deben operar de manera independiente entre sí).
Si bien las peticiones de las API normalmente se completan en segundos, es posible que durante situaciones transitorias de cargas pico el tiempo de procesamiento sea más largo.
Para asegurarse de que la biblioteca de su cliente no suspenda prematuramente las peticiones de la API, se deberá configurar con un tiempo de espera de inactividad de por lo menos 180 segundos.
Usamos estratos convencionales de HTTP para indicar el éxito o el fracaso de una petición API e incluímos información importante del error en el objeto de error JSON devuelto.
Tratamos de siempre regresar un objeto de error JSON con las solicitudes problemáticas. Sin embargo, siempre es teóricamente posible tener fallas del servidor interno que conducen a una respuesta de error que no es tipo JSON.
Atributos |
|
---|---|
status | El estado HTTP de la respuesta, se repite aquí para ayudarle con la depuración. |
code | Código de error interno de Vectorizer.AI. |
message | Mensaje de error en lenguaje natural, previsto para ayudar con la depuración. |
Si el estadeo del HTTP de su petición es 200, no se devolverá un objeto JSON de error y podrá suponer en términos generales que la petición tuvo éxito.
Algunas bibliotecas de clientes HTTP producen exepciones para estratos HTTP en la gama de 400
-599
. Tendrá que darse cuenta de esas excepciones y resolverlas apropiadamente.
HTTP Status | Significado |
---|---|
200 -299
|
Éxito |
400 -499
|
Hay un problema con la información proporcionada en la solicitud (p. ej. un parámetro faltante). Revise el mensaje de error para determinar cómo arreglarlo. |
500 -599
|
Hubo un error interno de Vectorizer.AI. Espere un momento y vuelva a intentar, y si el problema persiste, envíenos un mensaje de correo electrónico. |
Ejemplo de una respuesta de error
{ "error" : { "status" : 400, "code" : 1006, "message" : "Failed to read the supplied image. " } }
Los errores recientes de la API se enumeran en la página de su cuenta para que los pueda depurar.
También hay una lista de todas las respuestas de error que la API devuelve.
Estos son los encabezados de respuesta personalizados que usamos
Encabezado | Descripción |
---|---|
X-Image-Token
|
Devuelto cuando la petición de vecotrización tiene
|
X-Receipt
|
Se devuelve al descargar un resultado de producción con un token de imagen de vista previa. Se puede usar para descargar formatos adicionales (por ejemplo, SVG, PNG, PDF, etc.) del resultado a la velocidad del formato de descarga en lugar de a la velocidad de previsualización de actualización. |
X-Credits-Calculated
|
Se devolvió con solicitudes de prueba para mostrar el costo en el que se habría incurrido si hubiera sido una solicitud regular. |
X-Credits-Charged
|
Se devuelve con todas las solicitudes para mostrar el costo incurrido. Siempre es 0 para las solicitudes de prueba. |
POST
https://api.vectorizer.ai/api/v1/vectorize
Para convertir una imagen en vectores se ejecuta una petición HTTP POST estándar para cargar el archivo. Tenga en cuenta que el tipo de contenido tiene que ser multipart/form-data
cuando carga archivos binarios.
La tabla siguiente muestra todos los parámetros de la API para probar. Cada parámetro tiene una breve descripción, pero asegúrese de ver la documentación de las opciones detalladas de los resultados.
POST
https://api.vectorizer.ai/api/v1/download
Este punto final le permite:
Descargue el resultado de producción completo después de una llamada a la API de vista previa.
We include an X-Receipt
header in the response so you can download additional output formats at the reduced download format rate afterwards.
Descargue varios formatos de salida para obtener la misma imagen y opciones de procesamiento con una velocidad de formato de descarga reducida y sin tener que vectorizarlos todos desde cero.
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.
Normalmente no es necesario llamar a este punto final. Se proporciona para que pueda eliminar imágenes antes de que expire el período de retención. Si eliminas una imagen antes de tiempo, no recibirás un reembolso por los días de almacenamiento restantes.
Atributos de la respuesta |
|
---|---|
success |
|
Respuesta del ejemplo
{ "success" : true }
GET
https://api.vectorizer.ai/api/v1/account
Obtenga información básica sobre su cuenta, por ejemplo, el estado de su suscripción y el número de créditos restantes.
Parámetros |
|
---|---|
Ninguna |
Atributos de la respuesta |
|
---|---|
subscriptionPlan |
El plan en el que está inscrito ahora o 'ninguno'. |
subscriptionState |
El estado de su suscripción actual ('activa' o 'vencida') o 'cancelada' si no está inscrito. |
credits |
Los créditos de la API restantes en su cuenta. 0 si no está inscrito actualmente o si está inscrito en un plan sin API. Puede ser fraccional, así es que asegúrese de analizarlo como un Double. |
Nombre de usuario = Id de la API, contraseña = código secreto
cURL
$ curl "https://api.vectorizer.ai/api/v1/account" \ -u vkyc67kqa27yidd:[secret]
Respuesta del ejemplo
{ "subscriptionPlan" : "none", "subscriptionState" : "ended", "credits" : 0 }
Fecha | Cambiar |
---|---|
1 oct 2024 | Se ha añadido un chatbot de IA para facilitar la integración con la API. |
23 sept 2024 | Amplió considerablemente la API para permitir más modos de operación. Se agregaron los tokens de imagen, los recibos, los encabezados de cargos por llamada y los puntos finales de descarga y eliminación. |
11 jun 2024 |
Agregamos processing.palette
|
4 mar 2024 | Sección agregada sobre tiempos de espera. |
24 ene 2024 | Se agregó el punto de conexión al estatus de la cuenta. Se agregaron los errores de la API recientes a la página de la cuenta. Se agregó una lista de todas las respuestas de error de la API. |
16 ene 2024 | Se documentó el objeto JSON del error. |
3 oct 2023 |
Tome en cuenta que output.gap_filler.enabled=true produce más colores en el resultado que lo solicitado en processing.max_colors .
|
20 sept 2023 |
Agregamos mode
|
1 ago 2023 |
Agregamos un grupo de opciones de tamaño resultante con las siguientes opciones: 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 . Agregamos un grupo de opciones de resultado en mapa de bits con una opción: output.bitmap.anti_aliasing_mode .
|
7 jun 2023 |
Agregamos processing.max_colors
|
31 may 2023 | Ampliamos en gran medida los parámetros de la API. Actualizamos el punto de acceso de la API. |
10 mar 2023 | Publicación inicial. |