O Vectorizer.AI oferece uma API completa para rastreamento de bitmap. A API rastreia pixels para vetores com fidelidade inigualável, de forma totalmente automática.
Entre com uma imagem bitmap e obtenha como retorno o resultado vetorizado:
$ curl https://pt.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://pt.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://pt.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://pt.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://pt.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://pt.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://pt.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://pt.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://pt.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://pt.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://pt.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://pt.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://pt.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://pt.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
Nós criamos um CHATGPT personalizado para ajudar você na integração com a API. Ele pode responder perguntar sobre a documentação da API e fornecer um exemplo de código adaptado para seu caso de uso específico.
Converse com o Chatbot sobre a API do Vectorizer.AI
O chatbot está em versão beta e comete erros. Confira as respostas e peça a ele que revise o código para solucionar erros e omissões.
A API foi criada para ser aplicada em casos de uso muito variados. Este são alguns dos comuns:
Utilize o endpoint Vectorize e os exemplos de código acima.
Se você precisa fazer muitas chamadas de API para fazer uma venda, é possível usar as prévias, mais baratas, até converter o cliente.
Utilize o endpoint Vectorize com mode=preview
e policy.retention_days > 0
para receber uma prévia, mantendo o token da imagem retornado no cabeçalho de resposta X-Image-Token
.
Após a conversão, para fazer download do resultado completo, utilize o endpoint Download com o token da imagem.
Opcional: se precisar do resultado em mais formatos (por exemplo, PNG, PDF, etc), mantenha o recibo retornado no cabeçalho de resposta do download X-Receipt
. Depois, utilize o endpoint Download com o token da imagem e o recibo para fazer download nos outros formatos.
Utilize o endpoint Vectorize com policy.retention_days > 0
para obter o primeiro resultado e mantenha o token da imagem retornado no cabeçalho de resposta X-Image-Token
.
Utilize o endpoint Download com o token da imagem para fazer download de outros formatos.
Utilize o endpoint Vectorize com policy.retention_days > 0
para obter o primeiro resultado e mantenha o token da imagem retornado no cabeçalho de resposta X-Image-Token
.
Utilize o endpoint Vectorize com o token da imagem para fazer iterações com as outras opções de processamento que precisa.
Como alternativa, você pode processar cada imagem individualmente, sem se preocupar com o token da imagem. O token da imagem economiza um pouco de banda e latência.
Ação | Créditos | Descrição |
---|---|---|
Teste | 0.00 |
Você pode fazer testes e integração com a API gratuitamente. A assinatura não é necessária.
Utilize Você pode avaliar a qualidade do resultado usando o app interativo da Web na página inicial do site. |
Prévia | 0.20 |
Nós oferecemos a visualização de uma prévia dos resultados, que você pode mostrar ao seu usuário final antes que ele faça a compra. As prévias são imagens PNG quatro vezes maiores do que a imagem fornecida por você e trazem uma marca d'água discreta.
Utilize |
Vetorização | 1.00 | Vetorize uma imagem em bitmap para uma imagem vetorial. |
Visão prévia do upgrade | 0.90 | Faça download do resultado de produção após a chamada de API da prévia. É mais barato do que vetorizar novamente desde o início. |
Formato de download | 0.10 | Faça download do resultado em outros formatos, como SVG, PNG, PDF, etc. É mais barato do que vetorizar novamente desde o início. |
Dia de armazenamento | 0.01 | Preço por dia para armazenar um resultado gratuitamente após o primeiro dia. |
Consulta os planos de assinatura na página de preços.
A API usa autenticação padrão HTTP básica de acesso. Todas as requisições para a API devem ser feitas em HTTPS e incluir suas credenciais da API, tendo API Id como usuário e API Secret como senha.
Sua biblioteca de cliente HTTP deve aceitar Indicação de Nome do Servidor (SNI) para fazer requisições corretamente. Se você estiver recebendo erros de handshake estranhos, provavelmente esta é a causa.
O uso da API tem limite de taxa com margens generosas e não há tetos definitivos.
Durante as operações conduzidas pelo usuário final, é improvável que você tenha limitações de velocidade, pois o uso é adaptado pelo sistema de forma transparente.
No entanto, para trabalhos em lote, recomendamos começar com no máximo cinco ramificações e adicionar uma nova ramificação a cada cinco minutos, até atingir o nível de paralelismo desejado. Se você precisa de mais de 100 ramificações simultâneas, fale conosco antes de começar.
Se enviar requisições em excesso, você começará a receber respostas do tipo 429 Too Many Requests
. Se isso ocorrer, você deverá aplicar um algoritmo de back off linear: na primeira resposta desse tipo, aguarde 5 segundos até reenviar a requisição seguinte. Na segunda resposta 429 consecutiva, aguarde 2 x 5=10 segundos até reenviar a requisição seguinte. Na terceira, aguarde 3 x 5=15 segundos, e assim por diante.
Você poderá reinicializar o contador de back off após o processamento satisfatório de uma requisição, e o back off deve ser aplicado ramificação a ramificação, ou seja, as ramificações devem operar independentemente.
Em geral, as solicitações de API são executadas em segundos, mas é possível que o tempo de processamento seja mais longo durante picos de carga.
Para assegurar que sua biblioteca de cliente não encerre solicitações de API prematuramente, ela deveria ser configurada com um limite de tempo de inatividade mínimo de 180 segundos
Usamos status HTTP convencionais para indicar êxito ou falha de uma requisição de API e incluir informações importantes sobre erro no objeto JSON de erro retornado.
Tentamos sempre retornar um objeto JSON de erro com qualquer requisição problemática. Teoricamente, no entanto, sempre é possível haver falhas internas no servidor que resultam em uma resposta de erro não JSON.
Atributos |
|
---|---|
status | O status HTTP da resposta, repetido aqui para auxílio na depuração de erros. |
code | código interno de erro Vectorizer.AI |
message | Mensagem de erro inteligível, para ajudar na depuração. |
Se o status HTTP da sua requisição for 200, não haverá retorno de Objeto JSON de erro e você pode supor com segurança que a requisição foi, de forma geral, exitosa.
Algumas bibliotecas de cliente HTTP suscitam exceções para status HTTP no intervalo 400
-599
. Você deverá obter essas exceções e tratá-las adequadamente.
HTTP Status | Significado |
---|---|
200 -299
|
Êxito |
400 -499
|
Há um problema com as informações fornecidas na requisição, por exemplo, a falta de um parâmetro. Analise a mensagem de erro para resolver como solucioná-lo. |
500 -599
|
Houve um erro interno no Vectorizer.AI. Aguarde alguns momentos e tente novamente. Se o problema persistir, envie-nos um e-mail. |
Exemplo de resposta de erro
{ "error" : { "status" : 400, "code" : 1006, "message" : "Failed to read the supplied image. " } }
Os erros de API recentes estão relacionados na página da sua conta para facilitar o debugging.
Também há uma lista de todas as respostas de erro retornadas pela API.
Estes são os cabeçalhos de resposta utilizados:
Cabeçalho | Descrição |
---|---|
X-Image-Token
|
Retornado quando a solicitação de vetorização tem
|
X-Receipt
|
Retornado no download de um resultado de produção usando o token de uma prévia da imagem. Pode ser usado para fazer download de outros formatos do resultado (por exemplo, SVG, PNG, PDF, etc.) pelo custo de download de formato, em vez do custo de upgrade da prévia da imagem. |
X-Credits-Calculated
|
Retornado com as solicitações de teste para mostrar o custo que seria incorrido de esta fosse uma solicitação normal. |
X-Credits-Charged
|
Retornado com todas as solicitações para mostrar o custo incorrido. É sempre 0 nas solicitações de teste. |
POST
https://api.vectorizer.ai/api/v1/vectorize
Para vetorizar uma imagem, basta fazer um upload de arquivo HTTP POST padrão. Lembre-se de que o Content-Type deve ser multipart/form-data
no upload de arquivos binários.
A tabela abaixo lista todos os parâmetros da API para que você possa testar agora. Cada parâmetro tem uma descrição sucinta, mas você pode consultar mais detalhes na Documentação de opções de saída.
POST
https://api.vectorizer.ai/api/v1/download
Este endpoint permite:
Fazer download do resultado de produção completo depois de fazer uma chamada de API de prévia.
O cabeçalho X-Receipt
é incluído na resposta, para que, depois, você possa fazer download de outros formatos de resultado ao preço reduzido do formato de download.
Fazer download de vários formatos de resultado para a mesma imagem e opções de processamento ao preço reduzido de formato de download, sem precisar revetorizar desde o início.
POST
https://api.vectorizer.ai/api/v1/delete
As imagens vetorizadas com policy.retention_days > 0
são armazenadas pelo período solicitado e excluídas automaticamente pouco depois.
De forma geral, não há necessidade de chamar este endpoint. Ele é oferecido para que você possa excluir imagens antes que o período de retenção termine. A exclusão antecipada da imagem não proporcionar um reembolso dos dias de armazenamento remanescentes.
Atributos de resposta |
|
---|---|
success |
|
Exemplo de resposta
{ "success" : true }
GET
https://api.vectorizer.ai/api/v1/account
Obtenha informações básicas sobre a sua conta, como o status da assinatura e o número de créditos remanescentes.
Parâmetros |
|
---|---|
Nenhum |
Atributos de resposta |
|
---|---|
subscriptionPlan |
O seu plano de assinatura atual ou "nenhum". |
subscriptionState |
O status do seu plano de assinatura atual ("ativo" ou "atrasado") ou, se não houver assinatura, "terminado". |
credits |
A quantidade de créditos da API remanescente em sua conta. 0 se não tiver assinatura ou se a assinatura for de uma plano sem API. Pode ser fracionário, portanto aplique parse como Double. |
Experimente
Nome do usuário = Id da API, Senha = Segredo da API
cURL
$ curl "https://api.vectorizer.ai/api/v1/account" \ -u vkyc67kqa27yidd:[secret]
Exemplo de resposta
{ "subscriptionPlan" : "none", "subscriptionState" : "ended", "credits" : 0 }
Data | Alterar |
---|---|
4 de nov. de 2024 |
Foi adicionado processing.shapes.min_area_px .
|
1 de out. de 2024 | Foi adicionado o chatbot para auxiliar na integração com a API. |
23 de set. de 2024 | Expandiu substancialmente a API para possibilitar mais modos de operação. Adicionou tokens de imagem, recibos, cabeçalhos de cobrança por chamada, bem como endpoints de download e exclusão. |
11 de jun. de 2024 |
Foi adicionado processing.palette
|
4 de mar. de 2024 | Seção sobre limite de tempo foi adicionada. |
24 de jan. de 2024 | O endpoint Status da Conta foi adicionado. Os erros recentes de API foram adicionados à página da conta. A lista de todas as respostas de erro da API foi adicionada. |
16 de jan. de 2024 | Documentou o objeto JSON de erro. |
3 de out. de 2023 |
Esclarecimento de que output.gap_filler.enabled=true resulta em mais cores do que o solicitado em processing.max_colors .
|
20 de set. de 2023 |
Foi adicionado mode
|
1 de ago. de 2023 |
Grupo completo de opções do tamanho da saída foi adicionado com as seguintes opções: 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 e output.size.output_dpi . Grupo de opções de saída bitmap foi adicionado com uma opção: output.bitmap.anti_aliasing_mode .
|
7 de jun. de 2023 |
Foi adicionado processing.max_colors
|
31 de mai. de 2023 | Grande expansão dos parâmetro da API. Atualização do endpoint da API. |
10 de mar. de 2023 | Liberação inicial. |