Pixian Hapus API Latar Belakang Gambar

Pixian.AI menawarkan API penghapusan latar belakang gambar yang lengkap. API menghapus latar belakang gambar sepenuhnya secara otomatis dan dengan fidelitas terbaik di kelasnya.

Dapatkan Kunci API

Mulai cepat

POST gambar bitmap dan dapatkan kembali hasil yang dihapus latar belakangnya:

$ 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

Bermigrasi dari penyedia lain? Check out our migration guide

Harga

Integrasi dan pengujian API gratis, tidak perlu pembelian.

Cukup gunakan test=true untuk pengembangan. Anda dapat menilai kualitas hasil menggunakan Aplikasi Web interaktif di halaman depan.

Hasil produksi memerlukan pembelian paket pulsa. Silakan lihat halaman harga.

Otentikasi & Keamanan

API menggunakan otentikasi akses dasar HTTP standar. Semua permintaan ke API harus dilakukan melalui HTTPS dan menyertakan Kredensial API Anda, dengan ID API sebagai pengguna dan Rahasia API sebagai kata sandi.

Pustaka klien http Anda harus mendukung Server Name Indication (SNI) untuk membuat permintaan berhasil. Jika Anda mendapatkan kesalahan jabat tangan yang aneh, kemungkinan besar inilah masalahnya.

Pembatasan Tarif

Penggunaan API dibatasi tarif dengan tunjangan yang murah hati dan tidak ada batas atas yang keras.

Selama operasi normal yang digerakkan oleh pengguna akhir, Anda tidak akan mengalami pembatasan kecepatan karena penggunaan cenderung surut dan mengalir dengan cara yang ditangani layanan dengan baik.

Namun, untuk pekerjaan batch kami sarankan untuk memulai dengan paling banyak 5 utas, menambahkan 1 utas baru setiap 5 menit hingga Anda mencapai tingkat paralelisme yang diinginkan. Harap hubungi sebelum memulai jika Anda membutuhkan lebih dari 100 rangkaian pesan bersamaan.

Jika Anda mengirimkan terlalu banyak permintaan, Anda akan mulai mendapatkan jawaban 429 Too Many Requests. Jika ini terjadi, Anda harus menerapkan linear back off: pada respons pertama seperti itu, tunggu 5 detik hingga mengirimkan permintaan berikutnya. Pada jawaban 429 kedua berturut-turut, tunggu 2*5=10 detik hingga mengirimkan permintaan berikutnya. Yang ketiga tunggu 3*5=15 detik, dan seterusnya.

Anda dapat mengatur ulang penghitung mundur setelah permintaan berhasil, dan Anda harus menerapkan mundur pada basis per utas (yaitu utas harus beroperasi secara independen satu sama lain).

Batas waktu

Meskipun permintaan API biasanya diselesaikan dalam hitungan detik, waktu pemrosesan yang lebih lama mungkin terjadi selama lonjakan beban sementara.

Untuk memastikan pustaka klien Anda tidak menghentikan permintaan API sebelum waktunya, pustaka tersebut harus dikonfigurasi dengan waktu tunggu tidak aktif setidaknya 180 detik.

Kesalahan Objek JSON

Kami menggunakan status HTTP konvensional untuk menunjukkan keberhasilan atau kegagalan permintaan API, dan menyertakan informasi kesalahan penting dalam Objek JSON Kesalahan yang dikembalikan.

Kami berusaha untuk selalu mengembalikan Objek JSON Kesalahan dengan permintaan apa pun yang bermasalah. Namun, secara teoritis selalu mungkin terjadi kegagalan server internal yang menyebabkan respons kesalahan non-JSON.

Atribut

statusStatus HTTP dari respons, diulang di sini untuk membantu proses debug.
codePixian.AI kode kesalahan internal.
messagePesan kesalahan yang dapat dibaca manusia, dimaksudkan untuk membantu dalam proses debug.

Jika status HTTP untuk permintaan Anda adalah 200, maka Objek JSON Kesalahan tidak akan dikembalikan, dan Anda dapat berasumsi bahwa permintaan secara umum berhasil.

Beberapa pustaka Klien HTTP meningkatkan pengecualian untuk status HTTP di rentang 400-599. Anda perlu menangkap pengecualian tersebut dan menanganinya dengan tepat.

HTTP StatusMakna
200-299

Sukses

400-499

Ada masalah dengan informasi yang diberikan dalam permintaan (mis., Ada parameter yang hilang). Harap tinjau pesan kesalahan untuk mencari tahu cara memperbaikinya.

500-599

Terjadi Pixian.AI kesalahan internal. Tunggu beberapa saat kemudian coba lagi, dan jika masalah tetap ada, silakan email kami.

Contoh Kesalahan Jawaban

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

Format Delta PNG Latensi & Bandwidth Lebih Rendah

Pixian.AI bangga menjadi layanan penghapusan latar belakang pertama yang menawarkan format keluaran Delta PNG. Delta PNG lebih cepat untuk dikodekan dan jauh lebih kecil dibandingkan PNG biasa. Hal ini membuatnya sangat cocok untuk aplikasi yang sensitif terhadap latensi dan bandwidth, seperti aplikasi seluler.

Pelajari lebih lanjut Panah Kanan

Hapus Latar Belakang POST
https://api.pixian.ai/api/v2/remove-background

Untuk menghapus latar belakang dari suatu gambar, Anda melakukan pengunggahan file HTTP POST standar. Harap diingat Jenis Isi harus multipart/form-data saat mengunggah file biner.

Parameter

Gambar masukan harus disediakan sebagai salah satu dari:


Biner

File biner.


String

String berenkode base64. String bisa paling banyak 1 megabyte panjangnya.


String

URL untuk diambil dan diproses.

Harus berupa file .bmp, .gif, .jpeg, .png, atau .tiff.

Ukuran upload gambar maksimum (= lebar × tinggi) adalah 32.000.000 pixels, yang menyusut menjadi max_pixels .


Boolean, default: false

Lulus dalam true untuk mengindikasikan bahwa ini adalah gambar tes.

Abaikan atau teruskan false untuk gambar produksi.

Gambar uji bebas untuk diproses, tetapi hasilnya akan memiliki tanda air yang disematkan.


Bilangan bulat, 100 hingga 25000000, default: 25000000

Ukuran gambar masukan maksimum (= lebar & kali; tinggi). Gambar yang lebih besar dari ini akan diperkecil ke ukuran ini sebelum diproses.


Format: '#RRGGBB', mis. #0055FF

Warna latar belakang untuk diterapkan pada hasil. Abaikan untuk meninggalkan latar belakang transparan.

Pastikan untuk menyertakan awalan '#'.


Boolean, default: false

Apakah akan memotong hasilnya ke objek latar depan.

Sangat berguna bersama dengan result.margin dan result.target_size untuk mendapatkan hasil yang berukuran bagus dan terpusat setiap saat.


Format: '(x.y%|px){1,4}', misalnya 10px 20% 5px 15%, default: 0px

Margin untuk menambah hasilnya.

Itu ditambahkan terlepas dari apakah hasilnya dipotong ke latar depan atau tidak.

Jika result.target_size ditentukan, maka marginnya dimasukkan, yaitu tidak memperluas ukuran target efektif.

Unit yang didukung adalah % dan px. Ini mengikuti semantik CSS, sehingga Anda dapat menggunakan salah satu dari:

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


Format: 'w h', mis. 1920 1080

Terapkan ukuran hasil tertentu dalam piksel. Hasilnya akan diskalakan agar sesuai dengan ukuran yang ditentukan. Jika ada ruang berlebih maka selalu dipusatkan secara horizontal, dengan result.vertical_alignment mengontrol perlakuan vertikal.


Enum, default: middle

Menentukan cara mengalokasikan ruang vertikal berlebih saat result.target_size digunakan.


Enum, default: auto

Format keluaran. auto diinterpretasikan sebagai png untuk hasil transparan, dan jpeg untuk hasil buram, yaitu ketika background.color telah ditentukan.

delta_png adalah format canggih, cepat, dan sangat ringkas, terutama berguna untuk latensi rendah, situasi dengan bandwidth terbatas seperti aplikasi seluler. Ini mengkodekan latar belakang sebagai 0x00000000 hitam transparan dan latar depan sebagai 0x00FFFFFF putih transparan. Piksel yang sebagian transparan memiliki nilai warna sebenarnya. Bersama dengan gambar masukan Anda dapat menggunakan ini untuk merekonstruksi hasil penuh. Learn more about the Delta PNG format

background.color, result.crop_to_foreground, result.margin, result.target_size, dan result.vertical_alignment diabaikan saat menggunakan delta_png. Hasilnya harus berukuran sama dengan gambar masukan, jika tidak, decoding Anda akan gagal, sehingga max_pixels tidak boleh menyebabkan masukan menyusut.


Bilangan bulat, 1 hingga 100, default: 75

Kualitas yang digunakan saat mengkodekan hasil JPEG.

Header Hasil

X-Credits-Charged Kredit sebenarnya dibebankan.
X-Credits-Calculated Kredit terhitung yang akan dibebankan jika ini adalah permintaan produksi. Hanya dikembalikan untuk permintaan pengujian.
X-Input-Orientation Tag orientasi EXIF yang kita baca dan terapkan pada gambar masukan. Ini adalah nilai integer dari 1 hingga 8, inklusif. Ini berguna jika perpustakaan pemuatan gambar Anda tidak mendukung orientasi EXIF. Read more about EXIF orientation here
X-Input-Size [width] [height] gambar masukan dalam piksel, sebelum batasan ukuran apa pun diterapkan.
X-Result-Size [width] [height] gambar hasil, dalam piksel.
X-Input-Foreground [top] [left] [width] [height] kotak pembatas latar depan pada koordinat gambar masukan.
X-Result-Foreground [top] [left] [width] [height] kotak pembatas latar depan pada koordinat gambar hasil.

Log Perubahan API

TanggalGanti
4 Mar 2024 Bagian tambahan tentang batas waktu.
16 Jan 2024 Mendokumentasikan Objek Kesalahan JSON.
11 Jan 2024 Sekarang sebenarnya mengembalikan header X-Credits-Charged dan menambahkan header X-Credits-Calculated untuk permintaan pengujian.
13 Jun 2023 Memperbarui API ke versi 2 dan parameter dari camelCase ke snake_case agar lebih mudah dibaca. Versi API sebelumnya tidak digunakan lagi tetapi masih tersedia.
3 Mei 2023 Sangat memperluas parameter API.
28 Apr 2023 Memperbarui titik akhir API.
21 Mar 2023 Peluncuran pertama.
Dapatkan Kunci API