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 통합에 도움이 될 수 있는 사용자 지정 ChatGPT를 만들었습니다. API 문서에 대한 질문에 답변하고 사용 사례에 맞게 기본 설정 언어로 샘플 코드를 제공할 수 있습니다.
Chat with the Vectorizer.AI API Chatbot
챗봇은 베타 버전이며 실수를 합니다. 답을 다시 확인하고 코드를 수정하여 오류와 누락을 수정하도록 요청하세요.
API는 다양한 사용 사례를 지원하도록 설계되었습니다. 다음은 몇 가지 일반적인 예입니다:
Vectorize(벡터화) 엔드포인트와 위의 코드 샘플을 사용하하십시오.
판매를 위해 많은 API 호출을 해야 하는 경우, 실제로 고객을 전환할 때까지 비용이 저렴한 미리보기를 사용할 수 있습니다.
mode=preview
및 policy.retention_days > 0
와 함께 벡터화 엔드포인트를 사용하여 미리보기를 가져오고, X-Image-Token
응답 헤더에서 반환된 이미지 토큰을 유지해야 합니다.
변환 후 이미지 토큰과 함께 다운로드 엔드포인트를 사용하여 전체 결과를 다운로드합니다.
선택 사항: 추가 결과 형식(예: PNG, PDF 등)이 필요한 경우 X-Receipt
다운로드 응답 헤더에서 반환된 영수증을 보관하십시오. 그런 다음 이미지 토큰과 영수증을 사용하여 다운로드 엔드포인트를 사용하여 나머지 형식을 다운로드합니다.
policy.retention_days > 0
와 함께 벡터화 엔드포인트를 사용하여 첫 번째 결과를 얻고, X-Image-Token
응답 헤더에서 반환된 이미지 토큰을 유지해야 합니다.
다른 형식을 다운로드하려면 이미지 토큰을 사용하여 다운로드 엔드포인트를 사용하십시오.
policy.retention_days > 0
와 함께 벡터화 엔드포인트를 사용하여 첫 번째 결과를 얻고, X-Image-Token
응답 헤더에서 반환된 이미지 토큰을 유지해야 합니다.
벡터화 엔드포인트를 이미지 토큰과 함께 사용하여 필요한 나머지 처리 옵션을 반복합니다.
혹은 각 이미지를 개별적으로 처리하고 이미지 토큰에 대해 걱정할 수도 있습니다. 이미지 토큰은 대역폭과 대기 시간을 약간 절약해줍니다.
행동 | 제작진 | 설명 |
---|---|---|
테스팅 | 0.00 |
API와의 통합 및 테스트는 무료이며, 구독이 필요하지 않습니다.
개발에는 첫 페이지의 대화형 웹 앱을 사용하여 결과 품질을 평가할 수 있습니다. |
미리보기 | 0.20 |
최종 사용자가 구매하기 전에 보여줄 수 있는 미리보기 결과를 제공합니다. 미리보기는 입력한 것보다 4배 더 큰 PNG 이미지이며, 눈에 띄지 않는 워터마크가 함께 제공됩니다.
미리보기 결과를 얻으려면 |
벡터화 | 1.00 | 비트맵 이미지를 벡터 이미지로 벡터화합니다. |
업그레이드 미리보기 | 0.90 | 미리보기 API 호출 후 제작 결과를 다운로드합니다. 처음부터 벡터화하는 것보다 할인됩니다. |
다운로드 포맷: | 0.10 | 다른 형식(예: SVG, PNG, PDF 등)의 결과를 다운로드합니다. 처음부터 벡터화하는 것보다 할인됩니다. |
저장일 | 0.01 | 첫날을 넘어서도 결과를 저장할 경우 하루당 가격은 무료입니다. |
구독 요금제에 대해서는 가격 페이지를 참조하십시오.
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에서 반환된 모든 오류 응답 목록도 있습니다.
우리가 사용하는 사용자 정의 응답 헤더는 다음과 같습니다.
헤더 | 설명 |
---|---|
X-Image-Token
|
벡터화 요청에
|
X-Receipt
|
미리보기 이미지 토큰을 사용하여 제작 결과를 다운로드할 때 반환됩니다. 업그레이드 미리보기 가격 대신 다운로드 포맷 가격으로 결과의 추가 포맷(예: SVG, PNG, PDF 등)을 다운로드하는 데 사용할 수 있습니다. |
X-Credits-Calculated
|
테스트 요청과 함께 반환되어 일반 요청이었을 경우 발생했을 비용을 보여줍니다. |
X-Credits-Charged
|
발생한 비용을 보여주기 위해 모든 요청과 함께 반환됩니다. 테스트 요청은 항상 0입니다. |
POST
https://api.vectorizer.ai/api/v1/vectorize
이미지를 벡터화하려면, 표준 HTTP POST 파일 업로드를 수행합니다. 이진수 파일을 업로드할 때 콘텐츠-유형이 multipart/form-data
가 되어야 함을 주의하십시오.
아래 표에는 작동 중인 지금-사용해-보기 형식의 모든 API 매개변수가 나와 있습니다. 각 매개변수에는 간단한 설명이 있지만 자세한 출력 옵션 문서를 확인해야 합니다.
POST
https://api.vectorizer.ai/api/v1/download
이 엔드포인트를 사용하면 다음을 수행할 수 있습니다.
미리보기 API 호출 후 전체 제작 결과를 다운로드합니다.
응답에 X-Receipt
헤더를 포함하므로 나중에 감소된 다운로드 형식 속도로 추가 출력 형식을 다운로드할 수 있습니다.
동일한 이미지와 처리 옵션에 대해 여러 출력 형식을 저렴한 다운로드 포맷 요금으로 다운로드하고, 이를 처음부터 벡터화할 필요가 없습니다.
POST
https://api.vectorizer.ai/api/v1/delete
policy.retention_days > 0
로 벡터화된 이미지는 요청한 기간 동안 저장되고 그 후 곧 자동으로 삭제됩니다.
일반적으로 이 엔드포인트를 호출할 필요는 없습니다. 보존 기간이 만료되기 전에 이미지를 삭제할 수 있도록 제공됩니다. 이미지를 일찍 삭제하더라도 남은 보관 기간에 대한 환불은 제공되지 않습니다.
반응 특성 |
|
---|---|
success |
|
반응 예
{ "success" : true }
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 vkyc67kqa27yidd:[secret]
반응 예
{ "subscriptionPlan" : "none", "subscriptionState" : "ended", "credits" : 0 }
날짜 | 변경 |
---|---|
2024. 10. 1. | API와의 통합을 지원하는 AI 챗봇이 추가되었습니다. |
2024. 9. 23. | 더 많은 운영 모드를 활성화하기 위해 API를 크게 확장했습니다. 이미지 토큰, 영수증, 통화당 요금 헤더, 다운로드 및 삭제 엔드포인트가 추가되었습니다. |
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. | 초판. |