Pixian.AI oferuje pełnoprawny interfejs API usuwania tła obrazu. Interfejs API usuwa tła obrazów w pełni automatycznie i z najlepszą w swojej klasie wiernością.
OPUBLIKUJ obraz bitmapowy i uzyskaj wynik usunięty z tła:
$ 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
Migracja z innego dostawcy? Check out our migration guide
Integracja z API i testowanie go jest bezpłatna, bez konieczności zakupu.
Po prostu użyj test=true do rozwoju. Jakość wyników można ocenić za pomocą interaktywnej aplikacji internetowej na pierwszej stronie.
Wyniki produkcji wymagają zakupu pakietu kredytowego. Zapoznaj się z cennikiem.
Interfejs API używa standardowego podstawowego uwierzytelniania dostępu HTTP. Wszystkie żądania do interfejsu API muszą być kierowane przez HTTPS i muszą zawierać twoje poświadczenia API, z identyfikatorem API jako użytkownikiem i kluczem tajnym API jako hasłem.
Aby z powodzeniem wykonywać żądania, twoja biblioteka klienta HTTP musi obsługiwać oznaczanie nazwy serwera (SNI). Jeśli otrzymujesz dziwne błędy uzgadniania, to prawdopodobnie z tego powodu.
Używanie interfejsu API podlega ograniczeniu przepustowości z wysokimi przydziałami i bez stałej górnej granicy.
Prawdopodobieństwo napotkania na ograniczenie szybkości w zwykłym trybie działania sterowanym przez użytkownika końcowego jest małe, jako że usługa płynnie obsługuje tego rodzaju tryb użycia.
W przypadku zadań wsadowych zalecamy jednak, żeby zacząć od nie więcej niż 5 wątków, dodając 1 nowy wątek co 5 minut aż do osiągnięcia oczekiwanego poziomu równoległości. W razie potrzeby więcej niż 100 współbieżnych wątków, prosimy o kontakt przed rozpoczęciem procesu.
Najłatwiejszym sposobem osiągnięcia tego stopniowego wzrostu równoległości jest natychmiastowe uruchomienie liczby wątków, których ostatecznie chcesz użyć, ale następnie użycie semaforu liczącego, który zaczyna się od 5 zezwoleń. Następnie możesz mieć osobny wątek, który zwiększa liczbę zezwoleń o 1 co 5 minut.
Przesłanie zbyt wielu żądań spowoduje otrzymanie odpowiedzi 429 Too Many Requests. W takim wypadku należy zastosować wycofanie liniowe: po otrzymaniu pierwszej takiej odpowiedzi odczekaj 5 sekund przed przesłaniem kolejnego żądania. Po drugiej kolejnej odpowiedzi 429 odczekaj 2*5=10 sekund przed przesłaniem kolejnych żądań. Po trzeciej odpowiedzi odczekaj 3*5=15 sekund, itd.
Po pomyślnie wykonanym żądaniu możesz zresetować licznik wycofania i stosować wycofanie dla poszczególnych wątków (tzn. wątki powinny działać niezależnie od siebie).
Podczas gdy żądania API są zwykle wypełniane w ciągu kilku sekund, podczas przejściowych skoków obciążenia możliwe jest dłuższe czasy przetwarzania.
Aby upewnić się, że biblioteka kliencka nie zakończy przedwcześnie żądań interfejsu API, należy ją skonfigurować z limitem czasu bezczynności wynoszącym co najmniej 180 seconds.
Aby określić czy dane żądanie API zakończyło się pomyślnie czy niepomyślnie używamy konwencjonalnych statusów HTTP, uwzględniając istotne informacje o błędzie w zwróconym obiekcie JSON błędu.
Staramy się zawsze zwrócić obiekt JSON błędu dla każdego problematycznego żądania. Zawsze istnieje jednak teoretyczna możliwość wewnętrznych awarii serwera skutkujących odpowiedzią na błąd inną niż JSON.
|
Atrybuty |
|
|---|---|
| status | Status HTTP odpowiedzi, powtórzony tutaj żeby pomóc z debugowaniem. |
| code | Pixian.AI wewnętrzny kod błędu. |
| message | Czytelny dla użytkownika komunikat o błędzie, który ma pomóc w debugowaniu. |
Jeżeli status HTTP dla żądania wynosi 200, obiekt JSON błędu nie zostanie zwrócony i można bezpiecznie założyć, że żądanie zasadniczo się powiodło.
Niektóre biblioteki klienta HTTP zgłaszają wyjątki dla statusów HTTP w zakresie 400-599. Wyjątki te trzeba przechwycić i odpowiednio obsłużyć.
| HTTP Status | Znaczenie |
|---|---|
200-299
|
Powodzenie |
400-499
|
Wystąpił problem z informacją przekazaną w żądaniu (np. brakowało parametru). Przejrzyj komunikat o błędzie aby ustalić jak go rozwiązać. |
500-599
|
Wystąpił błąd wewnętrzny Pixian.AI. Zaczekaj chwilę i spróbuj ponownie, a jeśli problem nie zniknie, skontaktuj się z nami e-mailem. |
Przykładowa odpowiedź na błąd
{
"error" : {
"status" : 400,
"code" : 1006,
"message" : "Failed to read the supplied image. "
}
}
Pixian.AI jest dumny z tego, że jest pierwszą usługą usuwania tła oferującą format wyjściowy Delta PNG. Delta PNG są szybsze w kodowaniu i znacznie mniejsze niż zwykłe PNG. To sprawia, że są one bardzo odpowiednie dla aplikacji wrażliwych na opóźnienia i przepustowość, takich jak aplikacje mobilne.
POST
https://api.pixian.ai/api/v2/remove-background
Aby usunąć tło z obrazu, wykonaj standardowe przesłanie pliku HTTP POST. Pamiętaj, że przy przekazywaniu plików binarnych wymagany typ zawartości to multipart/form-data.
GET
https://api.pixian.ai/api/v2/account
Pobierz podstawowe informacje o swoim koncie, takie jak liczba pozostałych kredytów.
|
Parametry |
|
|---|---|
| Brak | |
|
Atrybuty odpowiedzi |
|||||
|---|---|---|---|---|---|
| creditPack |
Ostatnio zakupiony pakiet kredytowy, lub „brak”. |
||||
| state |
|
||||
| useBefore |
Wskazuje, kiedy pakiet kredytowy przejdzie w stan uśpienia. Będziesz musiał kupić kolejny pakiet kredytowy przed tą datą, aby kontynuować korzystanie z interfejsu API. W formacie ISO 8601. |
||||
| credits |
Liczba kredytów API pozostałych na Twoim koncie. Może być ułamkowy, więc pamiętaj, aby przeanalizować jako podwójny. |
||||
Wypróbuj to
Nazwa użytkownika = Identyfikator API, Hasło = Tajne API
cURL
$ curl "https://api.pixian.ai/api/v2/account" \ -u pxxbbzb96n2w8am:[secret]
Przykładowa odpowiedź
{
"creditPack" : "none",
"state" : "dormant",
"useBefore" : "1970-01-01T00:00:00Z",
"credits" : 0
}
| Data | Zmień |
|---|---|
| 27 mar 2026 |
Dodano możliwość określenia result.target_size, który zachowuje naturalny współczynnik proporcji wyniku.
|
| 12 lut 2025 | Dodano punkt końcowy API statusu konta. |
| 4 mar 2024 | Dodano sekcję dotyczącą limitu czasu. |
| 16 sty 2024 | Udokumentowano błąd obiektu JSON. |
| 11 sty 2024 |
Teraz faktycznie zwracam nagłówek X-Credits-Charged i dodano nagłówek X-Credits-Calculated dla żądań testowych.
|
| 13 cze 2023 | Zaktualizowano interfejs API do wersji 2 i parametry z CamelCase do snake_case dla łatwiejszej czytelności. Poprzednia wersja interfejsu API jest przestarzała, ale nadal dostępna. |
| 3 maj 2023 | Znacznie rozszerzono parametry interfejsu API. |
| 28 kwi 2023 | Zaktualizowano punkt końcowy interfejsu API. |
| 21 mar 2023 | Początkowe wydanie. |