Skip to main content
OpenAI usługa edycji obrazów pozwala na przesyłanie obrazów i poleceń, a następnie zwraca zmodyfikowane obrazy. Modele z serii GPT Image mogą jednocześnie przyjąć do 16 obrazów referencyjnych. Obecnie interfejs obsługuje jednocześnie gpt-image-1, najnowszy gpt-image-2, oraz modele z serii nano-banana / nano-banana-2-lite / nano-banana-2 / nano-banana-pro dostępne przez ten sam interfejs. Dokument ten głównie opisuje proces korzystania z OpenAI Images Edits API, dzięki któremu możemy łatwo korzystać z oficjalnych funkcji edycji obrazów OpenAI.

申请流程

Aby korzystać z OpenAI Images Edits API, najpierw przejdź do Ace Data Cloud 控制台, aby uzyskać swój token API, który należy zachować na przyszłość. Jeśli nie jesteś zalogowany lub zarejestrowany, automatycznie zostaniesz przekierowany na stronę logowania, aby zarejestrować się i zalogować, a po zakończeniu zostaniesz automatycznie przekierowany z powrotem na bieżącą stronę. Jeden token API wystarczy do korzystania ze wszystkich usług platformy, nie ma potrzeby składania osobnych wniosków dla każdej usługi. Przy pierwszym wniosku przyznawana jest darmowa pula, aby można było skorzystać z doświadczenia; w przypadku niewystarczającej puli można doładować saldo ogólne w kontrolerze.
📘 Pełna dokumentacja: OpenAI Images Edits API →

GPT-Image-2 模型

gpt-image-2 w scenariuszach edycji obrazów ma wyraźne ulepszenia w porównaniu do gpt-image-1:
  • Struktura zachowuje większą stabilność: zmiana skóry, kolorystyki, tła prawie nie niszczy układu i kompozycji oryginalnego obrazu.
  • Zachowanie tekstu jest dokładniejsze: obrazy zawierające tekst, takie jak infografiki, plakaty, menu, pozostają czytelne po edycji.
  • Wsparcie dla bezpośredniego przesyłania URL: oprócz tradycyjnego przesyłania plików multipart/form-data, gpt-image-2 dodatkowo wspiera przesyłanie URL obrazów w formacie JSON, co eliminuje potrzebę pobierania obrazów na lokalny dysk, co jest idealne do integracji w serwerowych pipeline’ach.
  • Wsparcie dla bezpośredniego przesyłania base64: zgodnie z oficjalnymi standardami, pole image może również bezpośrednio przyjmować base64 (data:image/png;base64,... lub surowy base64), co pozwala na edycję lokalnych obrazów bez konieczności przesyłania ich na hosting obrazów.
  • Wsparcie dla wysokiej rozdzielczości: można przesłać obraz o rozdzielczości 1K, a za pomocą parametru size zażądać wyjścia 2K / 4K, model w trakcie edycji jednocześnie powiększy obraz.

线路变体(:official / :reverse

gpt-image-2 domyślnie korzysta z standardowej trasy. Poprzez dodanie sufiksu do nazwy modelu można wyraźnie wybrać trasę:
  • gpt-image-2:official: oficjalny kanał, stabilny i zgodny. Koszty są określane przez tokeny wejściowe tekstu, tokeny wejściowe obrazów podczas edycji oraz tokeny wyjściowe obrazów, a ostateczne rozliczenie odbywa się na podstawie rzeczywistego zużycia w odpowiedzi; ceny jakości/rozmiaru wyświetlane na stronie służą jedynie do oszacowania; według maksymalnego pakietu Usage, cena dla klientów wynosi około 80% oficjalnej ceny OpenAI. Usługa automatycznie obsługuje błędy między dostępnymi kanałami, a możliwości i koszty są określane na podstawie rzeczywistych wyników.
  • gpt-image-2:reverse: całkowicie równoważne z domyślnym gpt-image-2, oferujące lepszy stosunek jakości do ceny, cena pozostaje bez zmian.
:official 计费公式 Ostateczny koszt = tokeny wejściowe tekstu + tokeny wejściowe obrazów (tylko edycja) + tokeny wyjściowe obrazów. Cena wyświetlana na stronie quality × size jest oszacowaniem przed żądaniem, rzeczywiste opłaty są zgodne z usage w odpowiedzi. Na przykład, low, 1024x1024 zazwyczaj kosztuje około 0.0505 kredytów za wyjście obrazu, plus niewielka ilość tokenów wejściowych; przy użyciu auto model może wybrać wyższą jakość, a wstępnie autoryzowana kwota będzie sprawdzana według wyższej stawki.

支持的 size 取值

Interfejs edycji weryfikuje format size zgodnie z interfejsem generowania — gpt-image-2 wymaga, aby size było auto, puste lub zgodne z formatem WIDTHxHEIGHT, wszelkie inne formy zwrócą 400. Domyślnie gpt-image-2 i :reverse obciążają za pojedynczy obraz; :official oblicza jednocześnie tokeny wejściowe tekstu, tokeny wejściowe obrazów referencyjnych oraz tokeny wyjściowe obrazów, oryginalny obraz, rozmiar i jakość mogą wpływać na ostateczny koszt. Ograniczenia rozmiaru: niestandardowe rozmiary muszą spełniać warunki, że szerokość i wysokość są wielokrotnościami 16, dłuższy bok ≤ 3840, całkowita liczba pikseli ≤ 8,294,400, przekroczenie tych wartości zwróci 4xx.
Na przykład: jeśli oryginalny obraz to 1024x1024, a size to 2048x2048, model przerysuje i wyprodukuje obraz 2K zgodnie z poleceniem edycji; jeśli size to 3840x2160, wyprodukuje obraz 4K w orientacji poziomej. Domyślnie gpt-image-2 i :reverse mają takie same opłaty za trzy rozmiary; :official opiera się na rzeczywistym zużyciu tokenów. Pominięcie pola size jest całkowicie równoważne z wyraźnym przesłaniem auto: gpt-image-2 najpierw odczyta wyraźne intencje dotyczące rozmiaru z podanych wskazówek, w tym pikseli, proporcji, orientacji, poziomu rozdzielczości (np. 4K / high-res) lub nazwy płótna. Gdy rozmiar zostanie rozpoznany, zastosowane zostaną konkretne wymiary; jeśli w podanych wskazówkach nie ma wymagań dotyczących rozmiaru lub automatyczne rozpoznanie jest niedostępne, nastąpi powrót do rozmiaru pierwszego obrazu referencyjnego. Ostateczny konkretny rozmiar zostanie znormalizowany do wielokrotności 16, z ograniczeniami długości boku i całkowitej liczby pikseli przed złożeniem żądania; w przypadku potrzeby absolutnej kontroli proszę bezpośrednio przesłać WIDTHxHEIGHT. Po zakończeniu generowania nie nastąpi automatyczna ponowna próba z powodu różnicy w pikselach wyjściowych, aby uniknąć powstawania dodatkowych kosztów za powtórne generowanie. O parametrze n Interfejs edycji gpt-image-2 obsługuje n > 1: można uzyskać odpowiednią liczbę wyników edycji w jednym żądaniu. Domyślnie gpt-image-2 oraz :reverse są rozliczane na podstawie liczby udanych obrazów; :official na podstawie rzeczywistego zużycia tokenów w całej odpowiedzi (wartości n od 1 do 10). To samo dotyczy gpt-image-1 / gpt-image-1.5, a także serii nano-banana / nano-banana-2-lite / nano-banana-2 / nano-banana-pro. Należy pamiętać, że response_format=b64_json obsługuje tylko n=1, a przy n>1 należy użyć domyślnego zwrotu URL. Jeśli część obrazów nie zostanie wygenerowana, zwrócone i rozliczone zostaną tylko udane części.
Poniżej przedstawiono dwa różne przykłady rzeczywiste, aby poczuć zdolności edycyjne gpt-image-2.

Sposób wywołania 1: JSON + URL obrazu (zalecane)

Bezpośrednio wysyłaj żądanie w formacie application/json, w polu image wprowadź URL jednego obrazu, a model pobierze ten obraz i edytuje go zgodnie z prompt. Na przykład, poniższy obrazek został wygenerowany przez gpt-image-2 jako infografika:

Chcemy zmienić jego kolorystykę na „tryb nocny”. Można to wywołać w ten sposób:
Lub używając Pythona:
Wynik zwrotny wygląda następująco:
Edytowany obrazek wygląda następująco:

Można zauważyć, że struktura modułów, podział informacji i układ czcionek zostały ściśle zachowane, a jedynie kolorystyka została odwrócona na ciemny motyw.
Wskazówka: Pole image obsługuje również przekazywanie tablicy, na przykład "image": ["url1", "url2", "url3"], maksymalnie można jednocześnie przekazać 16 obrazów referencyjnych, aby model mógł uwzględnić wiele obrazów podczas edycji.
Bezpośrednie przesyłanie base64: image (oraz każdy element tablicy) może być również w formacie base64 — data:image/png;base64,... lub czysty base64, co jest odpowiednie w przypadku lokalnych obrazów, które nie chcemy najpierw przesyłać na serwer. Na przykład:

Sposób wywołania 2: JSON + wiele obrazów referencyjnych

gpt-image-2 obsługuje jednoczesne uwzględnianie wielu obrazów w celu wygenerowania ostatecznego wyniku, na przykład łączenie wielu zdjęć produktów w jeden kosz prezentowy:

Przykład scenariusza: zmiana stylu + zachowanie struktury

Oto inny przykład, w którym drewniana półka na książki została zastąpiona nowoczesną półką wiszącą, ale dokładnie zachowano liczbę i układ książek na każdej półce. Obraz oryginalny (drewniana półka na książki wygenerowana przez gpt-image-2):

Wywołanie:
Wynik edycji ( task_id: e9544dba-727e-44a2-81e1-223d49869380):

Można zauważyć, że styl i otoczenie zostały całkowicie zastąpione zgodnie z podanymi wskazówkami, ale liczba książek na każdej półce (1 / 3 / 7) została ściśle zachowana, a zgodnie z wymaganiami dodano małą roślinę doniczkową.

Sposób wywołania 3: multipart/form-data (kompatybilne z OpenAI SDK)

Jeśli już korzystasz z oficjalnego SDK OpenAI w Pythonie, dotychczasowy sposób przesyłania multipart/form-data również jest odpowiedni, wystarczy zmienić model na gpt-image-2:
Korzystając z SDK, należy najpierw zaimportować dwie zmienne środowiskowe, OPENAI_BASE_URL ustaw na https://api.acedata.cloud/openai, a OPENAI_API_KEY na uzyskany token:

Modele serii Nano Banana

Seria nano-banana również integruje się z /openai/images/edits w scenariuszach edycji, wystarczy zmienić model na dowolny z poniższej tabeli.
Ważne: Zakres obsługiwanych parametrów Nano Banana łączy się z protokołem OpenAI przez warstwę adaptacyjną, obsługuje tylko następujące parametry: model, prompt, image, n.
  • image można przesyłać zarówno jako plik multipart/form-data (lokalne pliki będą automatycznie przetwarzane na base64), jak i bezpośrednio jako ciąg URL obrazu w polu formularza.
  • Nie obsługuje parametrów mask, size, response_format itp.; wypełnione będą ignorowane. n > 1 jest obsługiwane (1–10), zwróci i obciąży za odpowiadającą liczbę wyników edycji.
  • Struktura zwrotna przestrzega formatu OpenAI (data[].url), ale created jest stałe i wynosi 0, a b64_json nie będzie zwracane, revised_prompt zawsze równa się oryginalnemu prompt.

Wywołanie przez formularz + URL obrazu

Wynik zwrotny wygląda następująco:
Edytowany obraz:

Wywołanie przez formularz + lokalny plik

Asynchroniczny callback

Mechanizm asynchronicznego callbacku callback_url działa również w przypadku nano-banana, proces wywołania jest całkowicie zgodny z innymi modelami, szczegóły w sekcji Asynchroniczny callback.

Podstawowe użycie

Teraz można używać kodu do wywołania, poniżej znajduje się przykład wywołania za pomocą CURL:
Podczas pierwszego użycia tego interfejsu musimy wypełnić co najmniej cztery elementy, jeden to authorization, który można bezpośrednio wybrać z rozwijanej listy. Kolejny parametr to model, model to kategoria modelu, którą wybieramy do użycia w witrynie OpenAI, tutaj mamy głównie 1 model, szczegóły można znaleźć w dostarczonym modelu. Kolejny parametr to prompt, prompt to nasz wpisany tekst, który ma generować obraz. Ostatni parametr to image, ten parametr to ścieżka do obrazu, który ma być edytowany, obraz do edycji przedstawiony jest na poniższym zdjęciu:
Wskazówka: image[] może występować wielokrotnie, aby przesłać wiele obrazów referencyjnych, na przykład -F "image[]=@a.png" -F "image[]=@b.png", modele serii GPT Image obsługują maksymalnie 16 obrazów (każdy nieprzekraczający 50 MB, w formacie png/webp/jpg). Przekroczenie liczby spowoduje zwrócenie 400.

Przykładowy kod wywołania w Pythonie o tym samym efekcie:
Aby wywołać w Pythonie, musimy najpierw zaimportować dwie zmienne środowiskowe, jedną OPENAI_BASE_URL, którą można ustawić na https://api.acedata.cloud/openai, oraz drugą zmienną z danymi uwierzytelniającymi OPENAI_API_KEY, której wartość uzyskuje się z authorization, w systemie Mac OS można ustawić zmienne środowiskowe za pomocą następujących poleceń:
Po wywołaniu zauważymy, że w bieżącym katalogu zostanie wygenerowany obraz gift-basket.png, a konkretny wynik wygląda następująco:

W ten sposób zakończyliśmy edycję obrazu. Obecnie interfejs Edits obsługuje dwa modele: gpt-image-1 i gpt-image-2, z których gpt-image-2 jest obecnie zalecanym modelem, szczegóły można znaleźć w powyższym rozdziale Model GPT-Image-2.

Asynchroniczny callback

Ponieważ czas edycji obrazu w OpenAI Images Edits API może być stosunkowo długi, jeśli API nie odpowiada przez dłuższy czas, żądanie HTTP będzie utrzymywać połączenie, co prowadzi do dodatkowego zużycia zasobów systemowych, dlatego to API oferuje również wsparcie dla asynchronicznych callbacków. Cały proces wygląda następująco: gdy klient wysyła żądanie, dodatkowo określa pole callback_url. Po wysłaniu żądania API natychmiast zwraca wynik, zawierający pole task_id, które reprezentuje aktualne ID zadania. Po zakończeniu zadania wynik edycji obrazu zostanie wysłany do określonego przez klienta callback_url w formie POST JSON, który również zawiera pole task_id, dzięki czemu wyniki zadania można powiązać za pomocą ID. Poniżej przyjrzymy się, jak to dokładnie działa na przykładzie. Po pierwsze, callback Webhook to usługa, która może odbierać żądania HTTP, deweloperzy powinni zastąpić to URL swojego własnego serwera HTTP. W tym celu, dla wygody demonstracji, użyjemy publicznej strony przykładowej Webhook https://webhook.site/, otwierając tę stronę, można uzyskać URL Webhook, jak pokazano na obrazku: Skopiuj ten URL, aby użyć go jako Webhook, przykładowy URL to https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab. Następnie możemy ustawić pole callback_url na powyższy URL Webhook, a także wypełnić odpowiednie parametry, jak pokazano w poniższym kodzie:
Po wywołaniu można zauważyć, że natychmiast otrzymujemy wynik, jak poniżej:
Po chwili możemy zaobserwować wyniki edycji obrazu na URL Webhook, treść jest następująca:
Widać, że w wyniku znajduje się pole task_id, a pole data zawiera wyniki edycji obrazu takie same jak w przypadku wywołania synchronicznego, dzięki czemu można powiązać zadanie za pomocą pola task_id.

Obsługa błędów

Podczas wywoływania API, jeśli wystąpią błędy, API zwróci odpowiednie kody błędów i informacje. Na przykład:
  • 400 token_mismatched: Złe żądanie, prawdopodobnie z powodu brakujących lub nieprawidłowych parametrów.
  • 400 api_not_implemented: Złe żądanie, prawdopodobnie z powodu brakujących lub nieprawidłowych parametrów.
  • 401 invalid_token: Nieautoryzowany, nieprawidłowy lub brakujący token autoryzacyjny.
  • 429 too_many_requests: Zbyt wiele żądań, przekroczono limit szybkości.
  • 500 api_error: Błąd wewnętrzny serwera, coś poszło nie tak na serwerze.

Przykład odpowiedzi błędu

Wnioski

Dzięki temu dokumentowi zrozumieliście, jak łatwo korzystać z OpenAI Images Edits API, aby wykorzystać oficjalne funkcje edycji obrazów OpenAI. Mamy nadzieję, że ten dokument pomoże Wam lepiej zintegrować i korzystać z tego API. W razie jakichkolwiek pytań, prosimy o kontakt z naszym zespołem wsparcia technicznego.