Pixian Resim Arka Planı API'sini Kaldır

Pixian.AI tam donanımlı bir arka planı kaldırma API'si sunar. API resim arka planlarını tamamen otomatik olarak ve alanının en iyisi doğrulukla kaldırır.

API Anahtarı alın

Hızlı Başlangıç

Bir bit eşlem resmi yükleyin ve arka planı kaldırılmış sonucu hemen alın:

$ curl https://api.pixian.ai/api/v2/remove-background \
 -u xyz123:[secret] \
 -F image=@example.jpeg \
 -o pixian_result.png
// Requires: org.apache.httpcomponents.client5:httpclient5-fluent

Request request = Request.post("https://api.pixian.ai/api/v2/remove-background")
   .addHeader("Authorization", "Basic cHh4YmJ6Yjk2bjJ3OGFtOltzZWNyZXRd")
   .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("pixian_result.png")) {
      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://api.pixian.ai/api/v2/remove-background", form).Result;

   if (response.IsSuccessStatusCode)
   {
      // Write result to disk, TODO: or wherever you'd like
      FileStream outStream = new FileStream("pixian_result.png", 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://api.pixian.ai/api/v2/remove-background',
  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("pixian_result.png", body);
  }
});
$ch = curl_init('https://api.pixian.ai/api/v2/remove-background');

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER,
    array('Authorization: Basic cHh4YmJ6Yjk2bjJ3OGFtOltzZWNyZXRd'));
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("pixian_result.png", $data);
} else {
  echo "Error: " . $data;
}
curl_close($ch);
# Requires "requests" to be installed (see https://pypi.org/project/requests/)
import requests

response = requests.post(
    'https://api.pixian.ai/api/v2/remove-background',
    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('pixian_result.png', '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 cHh4YmJ6Yjk2bjJ3OGFtOltzZWNyZXRd"
}

response = client.post("https://api.pixian.ai/api/v2/remove-background", {
  "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("pixian_result.png", 'w') { |file| file.write(response.body) }
else
  puts "Error: Code: " + response.status.to_s + ", Reason: " + response.reason
end
$ curl https://api.pixian.ai/api/v2/remove-background \
 -u xyz123:[secret] \
 -F 'image.url=https://example.com/example.jpeg' \
 -o pixian_result.png
// Requires: org.apache.httpcomponents.client5:httpclient5-fluent

Request request = Request.post("https://api.pixian.ai/api/v2/remove-background")
   .addHeader("Authorization", "Basic cHh4YmJ6Yjk2bjJ3OGFtOltzZWNyZXRd")
   .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("pixian_result.png")) {
      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://api.pixian.ai/api/v2/remove-background", form).Result;

   if (response.IsSuccessStatusCode)
   {
      // Write result to disk, TODO: or wherever you'd like
      FileStream outStream = new FileStream("pixian_result.png", 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://api.pixian.ai/api/v2/remove-background',
  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("pixian_result.png", body);
  }
});
$ch = curl_init('https://api.pixian.ai/api/v2/remove-background');

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER,
    array('Authorization: Basic cHh4YmJ6Yjk2bjJ3OGFtOltzZWNyZXRd'));
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("pixian_result.png", $data);
} else {
  echo "Error: " . $data;
}
curl_close($ch);
# Requires "requests" to be installed (see https://pypi.org/project/requests/)
import requests

response = requests.post(
    'https://api.pixian.ai/api/v2/remove-background',
    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('pixian_result.png', '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 cHh4YmJ6Yjk2bjJ3OGFtOltzZWNyZXRd"
}

response = client.post("https://api.pixian.ai/api/v2/remove-background", {
  "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("pixian_result.png", 'w') { |file| file.write(response.body) }
else
  puts "Error: Code: " + response.status.to_s + ", Reason: " + response.reason
end

Başka bir tedarikçiden geçiş? Check out our migration guide

Fiyatlandırma

API'ye entegre olma ve test etme ücretsizdir, satın alma yapmaya gerek yoktur.

Basım için sadece test=true kullanmanız yeterlidir. Ön sayfada bulunan etkileşimli Web Uygulamasını kullanarak sonuç kalitesini değerlendirebilirsiniz.

Üretim sonuçları için kredi paketi satın almak gerekmektedir. Lütfen fiyatlandırma sayfasına bakınız.

Kimlik Doğrulaması ve Güvenlik

API standart HTTP temel erişim kimlik doğrulaması kullanmaktadır. API'ye yapılan tüm isteklerin HTTPS üzerinden yapılması ve sizin kullanıcı olarak API kimliğinizi ve şifre olarak da API Parolası ile API Bilgilerinizi içermesi gerekmektedir.

Http istemci kitaplığınızın istekleri başarıyla gerçekleştirmesi için Sunucu Adı Belirtme (SNI) desteklemesi gerekmektedir. Eğer garip el sıkışma hatalarıyla karşılaşıyorsanız nedeni muhtemelen budur.

Hız Sınırı

API kullanım limitleri gayet bol tutulmuştur ve kesin bir üst sınır bulunmamaktadır.

Normal son kullanıcı işlemlerinde herhangi bir hız sınırlamasına rastlamanız pek olası değildir. Zira o durumdaki kullanım inişli çıkışlı olma eğilimindedir ve servis de bunun altından gayet rahatlıkla kalkar.

Bununla birlikte, gruplu işlerde en fazla 5 iş parçacığı ile başlayıp, arzu edilen paralelliğe erişene kadar her 5 dakikada bir yeni iş parçacığı eklemenizi tavsiye ediyoruz. Eğer 100'den fazla eş zamanlı iş parçacığına ihtiyacınız olacaksa çalışmaya başlamadan önce lütfen bizimle iletişime geçin.

Eğer çok fazla istek girişi yaparsanız, 429 Too Many Requests yanıtları almaya başlarsınız. Bu olduğunda doğrusal geri çekilme uygulamalısınız: böyle bir yanıtı ilk aldığınızda, bir sonraki isteği girmeden önce 5 saniye bekleyin. İkinci ardışık 429 yanıtında, bir sonraki isteği girene kadar 2*5=10 saniye bekleyin. Üçüncüde 3*5=15 saniye bekleyin.

İsteğinizin başarılı olmasının ardından geri çekilme sayacını sıfırlayabilirsiniz. Geri çekilmeyi iş parçacığı başına olacak şekilde uygulamanız iyi olacaktır (Mesela iş parçacıkları birbirinden bağımsız olarak çalışmalıdır).

Zaman aşımları

API talepleri normalde saniyeler içerisinde tamamlanmakla birlikte ani geçici yük artışları esnasında daha uzun süren işlem süreleriyle karşılaşılması olasıdır.

İstemci kitaplığınızın API isteklerini erkenden sonlandırmadığından emin olmak için eylemsiz zaman aşımının en az 180 saniye olarak ayarlanması gerekmektedir.

Hatalı JSON Nesnesi

API isteğinin başarılı veya başarısız olduğunu göstermek için geleneksel HTTP statüleri kullanılır ve hataya ilişkin önemli bilgiler dönen Hatalı JSON Nesnesinde bulunur.

Herhangi bir sorunlu istek olması durumunda Hatalı JSON Nesnesi yollamaya çalışıyoruz. Ancak teorik olarak JSON-dışı hata yanıtına neden olan dahili sunucu hatalarının olması her zaman mümkündür.

Özellikler

statusYanıtın HTTP durumu, hata ayıklaması işlemine yardımcı olmak için burada tekrar edilmiştir.
codePixian.AI iç hata kodu.
messageOkunabilir hata mesajı, hata ayıklamasında yardımcı olma amaçlıdır.

Eğer isteğinizin HTTP statüsü 200 ise hiçbir hatalı JSON Nesnesi döndürülmeyecektir. İsteğin genel anlamda başarılı olduğunu düşünebilirsiniz.

Bazı HTTP İstemci kitaplıkları 400-599 aralığındaki HTTP statüleri için özel durum oluşturmaktadır. Bu özel durumları yakalayıp uygun bir şekilde işlem yapmanız gerekecektir.

HTTP StatusAnlamı
200-299

Başarı

400-499

İstekte verilen bilgide (örneğin eksik bir parametre gibi) bir sorun bulunmaktadır. Sorunu çözmek için lütfen hata mesajını gözden geçirin.

500-599

Pixian.AI iç hata kodu oluştu. Bir dakika bekleyip daha sonra tekrar deneyin. Sorunun hala devam etmesi halinde lütfen bize e-posta yollayın.

Örnek Hata Yanıtı

{
  "error" : {
    "status" : 400,
    "code" : 1006,
    "message" : "Failed to read the supplied image. "
  }
}

Delta PNG Formatı Daha Düşük Gecikme Süresi ve Band Genişliği

Pixian.AI Delta PNG çıktı formatını sunan ilk arka plan kaldırma servisi olmaktan gurur duymaktadır. Delta PNGler normal PNGlerden daha hızlı kodlanmaktadır ve çok daha küçüktürler. Bu da onları mobil uygulamalar gibi gecikme süresi ve band genişliği konusunda hassas uygulamalar için oldukça uygun hale getirmektedir.

Daha fazla bilgi edinin Sağ Ok

Arka Planı Kaldır POST
https://api.pixian.ai/api/v2/remove-background

Bir resimden arka planı kaldırmak için standart bir HTTP POST dosyası yüklemesi yapılır. Unutmayın ikili dosyaları yüklerken İçerik Türü multipart/form-data olmak zorundadır.

Parametreler

Girdi resmi bunlardan bir tanesi olmalıdır:


İkili

İkili bir dosya.


Dize

base64-kodlu bir dize. Dizi boyut olarak en fazla 1 megabayt olabilir.


Dize

Getirip işleme almak için URL.

.bmp, .gif, .jpeg, .png, veya .tiff dosyası olmalıdır.

Maksimum resim yükleme boyutu (=en× yükseklik) 32.000.000pikseldir, max_pixels düzeyine küçültülür.


Boolean, varsayılan: false

Bunun bir test resmi olduğunu göstermek için true kodunu girin.

Prodüksiyon resimleri için atlayın veya false kodunu girin.

Test resimlerinde işlem yapmak ücretsizdir. Ancak sonuç üzerinde bir filigran bulunacaktır.


Tamsayı, 100 ila 25000000, varsayılan: 25000000

Maksimum girdi resim boyutu (= en × yüksekliktir). Bundan daha büyük olan resimler işleme başlamadan önce bu boyuta küçültülecektir.


Format: '#RRGGBB', örneğin #0055FF

Sonuca uygulanacak arka plan rengi. Saydam arka planı bırakmak için atlayın.

'#' ön ekini dahil etmeyi unutmayın.


Boolean, varsayılan: false

Sonucun ön plandaki nesneye kırpılması.

Her seferinde güzel boyutlanmış ve ortalanmış sonuç elde etmek için result.margin ve result.target_size ile oldukça faydalı.


Format: '(x.y%|px){1,4}', örneğin 10px 20% 5px 15%, varsayılan: 0px

Sonuca eklenecek kenar boşluğu

Sonucun ön plana kırpılmış olup olmamasından bağımsız olarak eklenmektedir.

Eğer result.target_size belirtildiyse o zaman marjin içe doğrudur, yani efektif hedef boyutunu genişletmez.

Desteklenen birimler: % ve px. CSS sematiğini izler, yani bunlardan herhangi birini kullanabilirsiniz:

  • [all]
  • [top/bottom] [left/right]
  • [top] [left/right] [bottom]
  • [top] [right] [bottom] [left]


Format: 'w h', örneğin 1920 1080

Belli bir sonuç boyutunu piksel olarak belirleyin. Sonuç belirlenmiş boyuta uygun sığdırılacaktır. Eğer fazla alan varsa o zaman result.vertical_alignment dikey uygulamasını kontrol altında tutarken hep yatay olarak ortalanır.


Enum, varsayılan: middle

result.target_size kullanıldığında fazladan dikey alanın nasıl paylaştırılacağını belirler.


Enum, varsayılan: auto

Çıktı formatı. auto, şeffaf sonuçlar için png olarak, saydam sonuçlar için ise, diğer bir deyişle background.color olduğunda, jpeg olarak yorumlanır.

delta_png mobil uygulamalar gibi özellikle düşük gecikmeli, bant genişliği-kısıtlamalı durumlar için gelişmiş, hızlı ve oldukça kompakt bir formattır. Arka planı şeffaf siyah 0x00000000 ve ön planı da şeffaf beyaz 0x00FFFFFF olarak kodlar. Kısmi şeffaf pikseller kendi gerçek renk değerlerine sahiptir. Bunu, girdi resmiyle birlikte tam sonucu yeniden oluşturmak için kullanabilirsiniz. Learn more about the Delta PNG format

delta_png kullanılırken background.color, result.crop_to_foreground, result.margin, result.target_size ve result.vertical_alignment göz ardı edilir. Sonucun girdi resmiyle aynı boyutta olması gerekmetedir; aksi takdirde kodlamanız başarısız olacaktır, bu nedenle de max_pixels kodunun girdinin küçülmesine neden olmaması gerekmektedir.


Tamsayı, 1 ila 100, varsayılan: 75

JPEG sonuçlarını kodlarken kullanılacak kalite.

Spnuç Başlıkları

X-Credits-Charged Fiilen kesilen krediler.
X-Credits-Calculated Bu gerçek bir sonuç üretme talebi olsaydı kesileceği hesaplanmış olan krediler. Yalnızca test talepleri için gösterilmektedir.
X-Input-Orientation Girdi resminden okuduğumuz ve uyguladığımız EXIF oryantasyon etiketi. Bu sayılar da dahil olmak üzere, 1 ila 8 arasında tam sayısal bir değerdir. Resim yükleme kitaplığınız EXIF oryantasyonunu desteklemiyorsa nu faydalıdır. Read more about EXIF orientation here
X-Input-Size Herhangi bir boyut engeli uygulanmadan önce, piksel olarak girdi resmi [width] [height].
X-Result-Size Sonuç resim [width] [height], piksel cinsinden.
X-Input-Foreground [top] [left] [width] [height] girdi resmin koordinatlarındaki ön planın sınırlayıcı kutusu.
X-Result-Foreground [top] [left] [width] [height] sonuç resmin koordinatlarındaki ön planın sınırlayıcı kutusu.

API Değişim günlüğü

TarihDeğiştir
4 Mar 2024 Zaman aşımlarıyla ilgili eklenen bölüm.
16 Oca 2024 Hatalı JSON Nesnesi belgelendi.
11 Oca 2024 Artık X-Credits-Charged başlığı döndürülüyor ve test talepleri için de X-Credits-Calculated başlığı eklendi.
13 Haz 2023 Daha kolay okunabilirlik sağlamak için API'yi 2. sürüme ve parametreleri de camelCase'den snake_case'e güncelledik. API'nin bir önceki versiyonu artık kullanımda değil ancak hala mevcut.
3 May 2023 API parametreleri büyük oranda genişletildi.
28 Nis 2023 API son noktası güncellendi.
21 Mar 2023 İlk piyasaya sürüm.
API Anahtarı alın