Vectorizer.AI는 본격적인 비트맵 추적 API를 제공합니다. API는 동급 최강의 충실도로 완전 자동으로 픽셀을 벡터로 트레이스합니다.
비트맵 이미지를 POST하고 벡터화된 결과를 얻습니다.
$ curl https://ko.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://ko.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://ko.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://ko.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://ko.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://ko.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://ko.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://ko.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://ko.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://ko.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://ko.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://ko.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://ko.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://ko.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
API와 무료로 통합하고 테스트할 수 있으며 구독이 필요하지 않습니다.
개발에는 mode=test
를 사용하십시오. 첫 페이지의 대화형 웹 앱을 사용하여 결과 품질을 평가할 수 있습니다.
제작 결과에는 구독이 필요하며 각각 1.00 크레딧이 필요합니다.
또한 최종 사용자가 구매하기 전에 보여줄 수 있는 미리보기 결과도 제공합니다.
미리보기는 입력한 것보다 4배 더 큰 PNG 이미지이며, 눈에 띄지 않는 워터마크와 함께 제공되며 비용은 각각 0.20 크레딧입니다.
미리보기 결과를 보시려면 mode=preview
를 사용하십시오.
구독 요금제에 대해서는 가격 페이지를 참조하십시오.
API는 표준 HTTP 기본 액세스 인증을 이용합니다. API에 대한 모든 요청은 HTTPS를 통해 이루어져야 하며 API 자격 증명을 포함해야 하며 API ID는 사용자로, API 암호는 비밀번호로 지정해야 합니다.
성공적인 요구를 하려면 귀하의 HTTP 클라이언트 라이브러리는 서버 이름 표시 (SNI)를 지원하여야 합니다. 이상한 핸드셰이크 에러를 받으면, 대부분이 이러한 이유입니다.
API의 사용은 관대 한 허용량으로 속도가 제한되며 상한선이 없습니다.
정상적 최종 사용자 중심 작동중에는 비율 제한을 거의 받지 않을것입니다, 그 이유는 사용이 줄어용자 중심 작동중에는 비율 제한을 거의 받지 않을것입니다, 그 이유는 사용이 줄어드는 경향이 있으며 서비스가 적절히 처리되는 방향으로 흘러갑니다.
하지만, 최대 5개의 스레드로 시작하고, 원하는 레벨의 평행에 도달할 때 까지, 매5분마다 1개의 스레드를 추가하기를 추천합니다. 100개 이상의 동시 스레드가 필요하면 시작하기 전에 알려주십시오.
너무 많은 요구를 제출하면 429 Too Many Requests
를 받기 시작합니다. 이러한 일이 발생하며, 선형적으로 물러나십시오: 처음 이러한 반응을 받으면, 다음 요구를 제출하기 전에 5초를 기다리십시오. 2번째의 연속적 429 반응을 받으면, 다음 요구를 제출하기 이전에 2*5=10 초를 기다리십시오. 3번째 반응을 받으면, 3*5=15 초, 등을 기다리십시오.
요구가 성공적이면, 물러나기를 재설정하시고 매 스레드에 기존하여 물러나십시오 (예, 스레드가 서로 독립적으로 작동하여야 합니다).
API 요청은 일반적으로 몇 초 내에 완료되지만 일시적인 로드 급증 중에는 처리 시간이 더 길어질 수 있습니다.
클라이언트 라이브러리가 API 요청을 조기에 종료하지 않도록 하려면 최소한 180 초의 유휴 시간 제한으로 구성해야 합니다.
우리는 API 요청의 성공 또는 실패를 알려주기 위하여 기본 HTTP 상태를 이용하며 또한 반환된 오류 JSON 매체에 중요한 에러 정보를 포함합니다.
문제가 있는 요구에는 언제나 오류 JSON 개체를 반환하려고 합니다. 하지만, 내부 서버 실패가 비-JSON 오류 메시지로 나타나는 것은 항상 이론적으로 가능합니다.
특성 |
|
---|---|
status | 디버깅에 도움이 되도록 응답의 HTTP 상태가 여기 다시 되풀이됩니다. |
code | Vectorizer.AI 내부 에러 코드. |
message | 디버깅에 유용한 사람이 읽을 수 있는 오류 메시지. |
귀하 요구의 HTTP 상태가 200 이면, 오류 JSON 개체가 반환되지 않으며, 요구가 널리 전달되었다고 생각하여도 안전합니다.
일부 HTTP 클라이언트 라이브러리는 400
에서 599
범위로 HTTP 상태 예외를 알려줍니다. 이러한 예외를 감지하고 적절히 처리하여야 합니다.
HTTP Status | 의미 |
---|---|
200 -299
|
성공 |
400 -499
|
요구에서 제공된 정보에 문제가 있습니다 (예, 매개변수가 없음) 오류 메시지를 검토하고 어떻게 수정할 것인지 알아보십시오. |
500 -599
|
Vectorizer.AI 내부 에러 코드가 있었습니다. 잠시 기다리신 다음 다시 시도하십시오, 그리고 문제가 계속되면 이메일을 저희한테 보내주십시오. |
오류 응답 예
{ "error" : { "status" : 400, "code" : 1006, "message" : "Failed to read the supplied image. " } }
디버깅 편의를 위해 최근 API 오류가 계정 페이지에 나열됩니다.
API에서 반환된 모든 오류 응답 목록도 있습니다.
POST
https://api.vectorizer.ai/api/v1/vectorize
이미지를 벡터화하려면, 표준 HTTP POST 파일 업로드를 수행합니다. 이진수 파일을 업로드할 때 콘텐츠-유형이 multipart/form-data
가 되어야 함을 주의하십시오.
아래 표에는 작동 중인 지금-사용해-보기 형식의 모든 API 매개변수가 나와 있습니다. 각 매개변수에는 간단한 설명이 있지만 자세한 출력 옵션 문서를 확인해야 합니다.
GET
https://api.vectorizer.ai/api/v1/account
구독 상태 및 남아 있는 크레딧과 같은 귀하의 계정 정보를 알아본다
추적 변수 |
|
---|---|
없음 |
반응 특성 |
|
---|---|
subscriptionPlan |
귀하가 현재 구독한 구독 플랜 또는 "없음". |
subscriptionState |
현재 구독 상태 ('유효' 또는 '연체') 또는 구독하고 있지 않으면 '종료'. |
credits |
귀하의 계정에 남아있는 크레딧 숫자. 현재 구독하고 있지 않거나 API가 아닌 계획을 구독하고 있는 경우 0입니다. 분수일 수 있으므로 반드시 Double로 구문 분석하십시오. |
사용자 이름 = API Id, 비밀번호 = API Secret
cURL
$ curl "https://api.vectorizer.ai/api/v1/account" \ -u 123:[secret]
반응 예
{ "subscriptionPlan" : "none", "subscriptionState" : "ended", "credits" : 0 }
날짜 | 변경 |
---|---|
2024. 6. 11. |
processing.palette 추가
|
2024. 3. 4. | 타임아웃에 대한 섹션이 추가되었습니다. |
2024. 1. 24. | 계정 상태 엔드포인트를 추가했습니다. 계정 페이지에 최근 API 오류를 추가되었습니다. 모든 API 오류 응답 목록이 추가되었습니다. |
2024. 1. 16. | 오류 JSON 개체를 문서화했습니다. |
2023. 10. 3. |
output.gap_filler.enabled=true 가 processing.max_colors 에서 요청한 것보다 결과에 더 많은 색상을 가져온다는 점을 명확히 했습니다.
|
2023. 9. 20. |
mode 추가
|
2023. 8. 1. |
다음 옵션과 함께 모든 기능을 갖춘 출력 크기 옵션 그룹을 추가했습니다: 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 . 하나의 옵션이 있는 비트맵 출력 옵션 그룹을 추가했습니다: output.bitmap.anti_aliasing_mode .
|
2023. 6. 7. |
processing.max_colors 추가
|
2023. 5. 31. | 크게 확장된 API 매개변수. API 엔드포인트를 업데이트했습니다. |
2023. 3. 10. | 초판. |