Pixian-API zum Entfernen von Bildhintergründen

Pixian.AI bietet eine ausgereifte API zum Entfernen von Bildhintergründen. Die API entfernt Bildhintergründe vollautomatisch und mit branchenführender Originaltreue.

API-Schlüssel abrufen

Schnellstart

Sie LADEN ein Bitmap-Bild HOCH und erhalten ein Ergebnis mit entferntem Hintergrund:

$ 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

Sie migrieren von einem anderen Anbieter? Check out our migration guide

Preise

Die Integration und Tests der API sind kostenlos; es ist kein Kauf erforderlich.

Benutzen Sie einfach test=true für die Entwicklung. Die Qualität des Ergebnisses können Sie mithilfe der interaktiven Web-App auf der Homepage der Website beurteilen.

Produktionsergebnisse erfordern den Kauf eines Punkte-Packs. Beziehen Sie sich bitte auf die Preisgebungsseite.

Authentifizierung und Sicherheit

Die API verwendet eine standardmäßige HTTP Basic Access Authentication. Alle Anfragen an die API müssen über HTTPS erfolgen und Ihre API-Zugangsdaten enthalten, wobei die API-ID als Benutzername und der geheime API-Schlüssel als Kennwort fungieren.

Ihre HTTP-Client-Bibliothek muss die Servernamensanzeige (Server Name Indication (SNI)) unterstützen, damit Anfragen erfolgreich gestellt werden können. Wenn seltsame Handshake-Fehler auftreten, ist dies wahrscheinlich die Ursache.

Geschwindigkeitsbegrenzung

Die Verwendung der API unterliegt einer Geschwindigkeitsbegrenzung mit großzügigen Limits und keiner festen Obergrenze.

Während des normalen vom Endbenutzer gesteuerten Betriebs sind Geschwindigkeitsbegrenzungen sehr unwahrscheinlich, da die Nutzung graduell ab- und zunimmt, sodass der Dienst reibungslos ausgeführt werden kann.

Bei Stapelaufträgen empfehlen wir jedoch, mit höchstens 5 Threads zu beginnen und dann alle 5 Minuten 1 neuen Thread hinzuzufügen, bis der gewünschte Parallelitätsgrad erreicht ist. Lassen Sie uns bitte vor Beginn wissen, wenn Sie mehr als 100 gleichzeitige Threads benötigen.

Wenn zu viele Anfragen eingereicht werden, erhalten Sie in zunehmendem Maße die Antwort 429 Too Many Requests. In diesem Fall sollten Sie den Vorgang linear zurückfahren: nach der ersten dieser Antworten warten Sie 5 Sekunden, bis Sie die nächste Anfrage einreichen. Bei der zweiten aufeinanderfolgenden 429-Antwort warten Sie 2*5=10 Sekunden, bis Sie die nächste Anfrage einreichen. Bei der dritten Antwort warten Sie 3*5=15 Sekunden usw.

Sie können den Rückfahrzähler nach einer erfolgreichen Anfrage zurücksetzen und sollten das Rückfahren pro Thread vornehmen (d. h. die Threads sollten unabhängig voneinander ausgeführt werden).

Timeouts

Die API-Anfragen werden normalerweise innerhalb von Sekunden abgeschlossen, aber wenn transiente Belastungsspitzen auftreten, kann es zu längeren Verarbeitungszeiten kommen.

Um sicherzustellen, dass Ihre Client-Bibliothek API-Anfragen nicht vorzeitig beendet, sollte sie mit einem Leerlauftimeout von mindestens 180 Sekunden konfiguriert werden.

Fehler-JSON-Objekt

Wir verwenden herkömmliche HTTP-Status, um den Erfolg oder Fehlschlag einer API-Anfrage anzuzeigen, und stellen wichtige Fehlerinformationen im zurückgegebenen Fehler-JSON-Objekt bereit.

Wir versuchen, bei einer problematischen Anfrage immer ein Fehler-JSON-Objekt zurückzugeben. Es ist jedoch theoretisch möglich, dass interne Serverfehler auftreten, die zu Nicht-JSON-Fehlerantworten führen.

Attribute

statusDer HTTP-Status der Antwort, der hier zur Unterstützung des Debugging wiederholt wird.
codePixian.AI – interner Fehlercode.
messageVisuell lesbare Fehlermeldung, die für das Debugging hilfreich sein soll.

Wenn der HTTP-Status für Ihre Anfrage 200 ist, wird kein Fehler-JSON-Objekt zurückgegeben, und Sie können mit großer Sicherheit davon ausgehen, dass die Anfrage generell erfolgreich war.

Manche HTTP-Client-Bibliotheken führen für HTTP-Status im Bereich 400-599 zu Ausnahmen. Diese Ausnahmen müssen erfasst und entsprechend behandelt werden.

HTTP StatusBedeutung
200-299

Erfolg

400-499

Es gibt ein Problem bei den in der Anfrage angegebenen Informationen (es fehlt z. B. ein Parameter). Prüfen Sie bitte die Fehlermeldung, um eine Methode zu finden, den Fehler zu beheben.

500-599

Bei Pixian.AI ist ein interner Fehler aufgetreten. Warten Sie einen Moment und versuchen Sie es erneut. Wenn das Problem immer noch auftritt, schicken Sie uns eine E-Mail.

Beispiel für eine Fehlerantwort

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

Delta-PNG-Format Geringere Latenz und Bandbreite

Pixian.AI ist stolz, als Erster einen Service zum Entfernen von Hintergründen anzubieten, der ein Delta-PNG-Ausgabeformat produziert. Delta-PNGs lassen sich schneller codieren und sind wesentlich kleiner als normale PNG-Dateien. Dadurch eignen sie sich hervorragend für latenz- und brandbreitenkritische Anwendungen, wie mobile Apps.

Weitere Infos Rechter Pfeil

Hintergrund entfernen POST
https://api.pixian.ai/api/v2/remove-background

Zum Entfernen des Hintergrunds aus einem Bildes führen Sie einen standardmäßigen HTTP POST-Dateiupload durch. Denken Sie daran, dass der Inhaltstyp als multipart/form-data vorliegen muss, wenn binäre Dateien hochgeladen werden.

Parameter

Das Eingabebild muss in einem der folgenden Formate bereitgestellt werden:


Binär

Eine binäre Datei.


Zeichenfolge

als base64-codierte Zeichenfolge. Die Zeichenfolge kann höchstens 1 Megabyte umfassen.


Zeichenfolge

Eine URL zum Abrufen und Verarbeiten.

Muss eine .bmp-, .gif-, .jpeg-, .png-, oder .tiff-Datei sein.

Die maximale Upload-Größe für Bilder (= Breite × Höhe) ist 32.000.000 Pixel. Diese Größe wird auf max_pixels reduziert.


Boolesch, Standardeinstellung: false

Übergeben Sie true, um anzuzeigen, dass es sich um ein Testbild handelt.

Lassen Sie dies aus oder übergeben Sie false für Produktionsbilder.

Testbilder werden kostenlos verarbeitet, aber in das Ergebnis wird ein Wasserzeichen eingebettet.


Ganzzahl, 100 zu 25000000, Standardeinstellung: 25000000

Die maximale Eingabebildgröße (= Breite × Höhe). Wenn das Bild größer ist, wird es vor der Verarbeitung auf diese Größe verkleinert.


Format: '#RRGGBB', z. B. #0055FF

Die Hintergrundfarbe, die auf das Ergebnis angewendet wird. Lassen Sie dies aus, um einen durchsichtigen Hintergrund zu erzeugen.

Geben Sie auf jeden Fall „#“ als Präfix mit ein.


Boolesch, Standardeinstellung: false

Ob das Ergebnis zum Vordergrundobjekt zugeschnitten werden soll.

Sehr nützlich in Kombination mit result.margin und result.target_size, um jedes Mal ein zentriertes Ergebnis einer guten Größe zu erhalten.


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

Der Rand, der zum Ergebnis hinzugefügt werden soll.

Er wird unabhängig davon hinzugefügt, ob das Ergebnis zum Vordergrund zugeschnitten wird.

Wenn result.target_size vorgegeben wird, ist der Rand innenliegend, d. h. er überschreitet nicht die effektive Zielgröße.

Die unterstützten Einheiten sind % und px. Es wird die CSS-Semantik angewendet; also können Sie die folgenden Optionen verwenden:

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


Format: 'w h', z. B. 1920 1080

Erzwingt eine bestimmte Ergebnisgröße in Pixeln. Das Ergebnis wird so skaliert, dass es in die vorgegebene Größe passt. Wenn zusätzlicher Raum vorhanden ist, wird das Ergebnis immer horizontal zentriert, wobei result.vertical_alignment die vertikale Ausrichtung steuert.


Enum, Standardeinstellung: middle

Gibt vor, wie zusätzlicher vertikaler Raum zugeteilt werden soll, wenn result.target_size verwendet wird.


Enum, Standardeinstellung: auto

Ausgabeformat. auto wird als png für durchsichtige Ergebnisse und als jpeg für undurchsichtige Ergebnisse interpretiert, d. h. wenn eine background.color vorgegeben wurde.

delta_png ist ein fortgeschrittenes, schnelles und hoch kompaktes Format, das besonders in latenz- und bandbreitenkritischen Anwendungsbereichen wie mobilen Apps nützlich ist. Es codiert den Hintergrund als transparentes Schwarz 0x00000000 und den Vordergrund als transparentes Weiß 0x00FFFFFF. Teilweise transparente Pixel besitzen ihre tatsächlichen Farbwerte. Sie können es gemeinsam mit dem Eingabebild zur Rekonstruktion des vollständigen Ergebnisses verwenden. Learn more about the Delta PNG format

background.color, result.crop_to_foreground, result.margin, result.target_size und result.vertical_alignment werden bei Verwendung von delta_png ignoriert. Das Ergebnis muss dieselbe Größe wie das Eingabebild aufweisen. Anderenfalls schlägt die Decodierung fehl, und max_pixels darf keine Verkleinerung der Eingabe verursacht haben.


Ganzzahl, 1 zu 100, Standardeinstellung: 75

Die Qualität, die bei der Codierung von JPEG-Ergebnissen verwendet werden soll.

Ergebniskopfzeilen

X-Credits-Charged Die tatsächlich in Rechnung gestellten Punkte.
X-Credits-Calculated Die berechneten Punkte, die in Rechnung gestellt worden wären, wenn es sich um eine Anfrage für die Produktion gehandelt hätte. Werden nur für Testanfragen zurückgegeben.
X-Input-Orientation Das EXIF-Ausrichtungstag, das gelesen und auf das Eingabebild angewendet wird. Es handelt sich um einen Ganzzahlwert von 1 bis einschließlich 8. Dies ist dann nützlich, wenn die Bildbibliothek die EXIF-Ausrichtung nicht unterstützt. Read more about EXIF orientation here
X-Input-Size [width] [height] des Eingabebildes in Pixeln, bevor Größenbeschränkungen angewendet wurden.
X-Result-Size [width] [height] des Ergebnisbildes in Pixeln.
X-Input-Foreground [top] [left] [width] [height] Begrenzungsrahmen des Vordergrundes in den Eingabebildkoordinaten.
X-Result-Foreground [top] [left] [width] [height] Begrenzungsrahmen des Vordergrundes in den Ergebnisbildkoordinaten.

API-Änderungsprotokoll

DatumÄndern
04.03.2024 Abschnitt über Timeouts hinzugefügt.
16.01.2024 Fehler-JSON-Objekt wurde dokumentiert.
11.01.2024 Jetzt wird tatsächlich die Kopfzeile X-Credits-Charged zurückgegeben, und es wurde die Kopfzeile X-Credits-Calculated für Testergebnisse hinzugefügt.
13.06.2023 API wurde auf Version 2 aktualisiert und die Parameter wurden zur leichterten Lesbarkeit von camelCase auf snake_case aktualisiert. Die vorherige Version der API ist veraltet, jedoch noch verfügbar.
03.05.2023 API-Parameter wurden erheblich erweitert.
28.04.2023 API-Endpunkt wurde aktualisiert.
21.03.2023 Erstversion.
API-Schlüssel abrufen