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 usos. Estos son algunos comunes:
Use el punto de conexión (endpoint) 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 preliminares de costo más bajo hasta que logre conseguir al cliente.
Use el punto de conexión (endpoint) 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 respuesta 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 la 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 la 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 latencia.
Acción | Créditos | Descripción |
---|---|---|
Pruebas | 0.00 |
Es gratis integrar con la API y hacer una prueba. No se requiere una suscripción.
Use Puede evaluar 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 paguen. Las vistas preliminares 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 precios 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
|
Devuelto cuando descarga un resultado de producción usando un Token de vista previa de la imagen. Se puede usar para descargar formatos adicionales (p. ej. SVG, PNG, PDF, etc.) del resultado con la tarifa de formato de descarga en lugar de la tarifa de actualizar de vista previa. |
X-Credits-Calculated
|
Devuelto con peticiones de prueba para mostrar lo que hubiera costado si hubiera sido una petición regular. |
X-Credits-Charged
|
Devuelto con todas las peticiones de mostrar el costo incurrido. Siempre es 0 para las peticiones 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 de acceso (endpoint) le permite:
Descargar el resultado de la producción completa después de una llamada de vista previa de la API.
Incluimos un encabezado X-Receipt
en la respuesta para que posteriormente pueda descargar la imagen en otros formatos a la tarifa reducida de descarga de formatos.
Descargar la imagen en múltiples formatos y opciones de procesamiento a la tarifa reducida de descarga de formatos y sin tener que vectorizar todas desde cero.
POST
https://api.vectorizer.ai/api/v1/delete
Las imágenes vectorizadas con policy.retention_days > 0
se guardan por el tiempo solicitado y se borrarn automáticamente después de ese tiempo.
Normalmente no hay necesidad de llamar este punto de acceso. Se le proporciona para que pueda borrar imágenes antes del vencimiento del tiempo de retención. La elimnación de una imagen antes del vencimienteo del tiempo de retención no produce un reembolso de 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 |
---|---|
4 nov 2024 |
Added processing.shapes.min_area_px .
|
1 oct 2024 | Agregamos un chatbot de AI para ayudar con la integración con la API. |
23 sept 2024 | Ampliamos considerablemente la API para habilitar más modos de operación. Agregamos Tokens de Imagen, Recibos, encabezados de cargos por llamada y los endpoints Descargar y Borrar. |
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. |