Generuj obrazy

Interfejs Image API jest częścią interfejsu API Product Studio. Wykorzystuje narzędzia generatywnej AI z interfejsu API Google Product Studio (GPS) do generowania i optymalizowania zdjęć produktów. Możesz go używać do zwiększania zaangażowania klientów i liczby konwersji.

Co możesz generować za pomocą interfejsu API?

  • zdjęcia produktów z tłami wygenerowanymi przez AI na podstawie podanych informacji o produkcie i promptu tekstowego;
  • zdjęcia produktów z usuniętym tłem oryginalnego obrazu;
  • Zdjęcia produktów, w przypadku których rozdzielczość oryginalnego obrazu została zwiększona

Generowanie tła obrazu

Metoda GenerateProductImageBackground umożliwia tworzenie zdjęć produktów z tłami wygenerowanymi przez AI na podstawie oryginalnego zdjęcia produktu i promptu tekstowego zawierającego szczegółowe informacje o tle.

Interfejs API akceptuje:

  • Zdjęcie produktu: może być jednym z tych elementów:
    • Identyfikator URI wskazujący obraz produktu (np. {"image_uri": "https://my-store.com/img/1.png"}).
    • Bajty obrazu w formacie RAW, np. {"image_bytes": b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01'}
  • Prompt: ciąg znaków określający tło do wygenerowania:
    • product_description: opis produktu.
    • background_description: Opis pożądanego tła.

Usuwanie tła obrazu

Metoda RemoveProductImageBackground może generować obrazy z usuniętym tłem z oryginalnego zdjęcia produktu.

Interfejs API akceptuje:

  • Zdjęcie produktu: może być jednym z tych elementów:
    • Identyfikator URI wskazujący obraz produktu, np. {"image_uri": "https://my-store.com/img/1.png"}
    • Bajty obrazu w formacie RAW, np. {"image_bytes": b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01'}
  • Kolor tła: kolor tła po usunięciu podany w formacie RGB. Jeśli nie podasz koloru, tło będzie przezroczystym obrazem 4-kanałowym RGBA.

Powiększanie obrazu

Metoda UpscaleProductImage może generować obrazy, w których rozdzielczość oryginalnego zdjęcia produktu jest zwiększona.

Interfejs API akceptuje zdjęcie produktu. Może to być:

  • Identyfikator URI wskazujący obraz produktu, np. {"image_uri": "https://my-store.com/img/1.png"}
  • Bajty obrazu w formacie RAW, np. {"image_bytes": "image_bytes"}

Korzystanie z bibliotek klienta

Zalecamy przesyłanie żądań za pomocą bibliotek klienta. Jeśli w Twoim języku nie jest dostępna obsługiwana biblioteka klienta, możemy udostępnić Ci pliki biblioteki bezpośrednio (w e-mailu lub w folderze na dysku udostępnionym), aby można było je zainstalować np. w projekcie Maven.

Przykłady

W tych przykładach używamy interfejsu API do generowania lub optymalizowania zdjęć produktów.

Generowanie tła zdjęcia produktu

Przykład pokazuje, jak wygenerować zdjęcie produktu z wybranym tłem.

Żądanie

Treść żądania zawiera obraz (identyfikator URI lub bajty) i prompt do generowania tła. Oto przykład struktury żądania z użyciem identyfikatora URI obrazu:

POST https://merchantapi.googleapis.com/productstudio/v1alpha/accounts/{ACCOUNT_ID}/generatedImages:generateProductImageBackground

{
   "input_image": {
      "image_uri": "https://services.google.com/fh/files/misc/abundance_intention_bath_salts.jpg"
   },
   "config": {
      "product_description": "a jar"
      "background_description": "sitting on a cracked stone surface surrounded by a cherry blossom tree and pink and white flowers in the background, high resolution, product photography, strong shadows and lights, creative"
   }
}

Możesz też użyć surowych bajtów obrazu:

POST https://merchantapi.googleapis.com/productstudio/v1alpha/accounts/{ACCOUNT_ID}/generatedImages:generateProductImageBackground

{
   "input_image": {
      "image_bytes": "b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff'"
   },
   "config": {
      "product_description": "a jar"
      "background_description": "sitting on a cracked stone surface surrounded by a cherry blossom tree and pink and white flowers in the background, high resolution, product photography, strong shadows and lights, creative"
   }
}

Odpowiedź

Możesz się spodziewać odpowiedzi takiej jak:

{
  "generated_image": {
    "image_bytes": "b'\x7d\x1b\x8f\x04\x5c\x9e\x23\xf0\x6a\xd1\x4b\x87\x0c\x3e\xa9\x21\xb5'"
    "generation_time": "2025-05-13T00:06:54.754828Z"
  },
}

Jeśli w output_config, zasada return_image_uri ma wartość true, będzie to wyglądać tak:

{
  "generated_image": {
    "uri": "https://lh3.googleusercontent.com/gps-generations/AI9LgEvIFfK0YaLKvwvIBc9ItJtJGFE6hi25o6-N3Fz6YTw57pFghfIVlCGve7eyJcQkhoAqGAf8NDzW70qjwGOCuHhiouqF2nqxBwCcfDxZPkYRl3h7CIjyev9asJw7x-0g0V_xvurfowZJ0moXu98kmV01A3Thv2ZRlTAiOPYuEb8wnY7EeyD9l48lDdwJgZ4jqxtTgrRbwvpno4NICj9q830RzATiBHuJ_WUFQJiHOMAqbGyrQIWQTQ",
    "generation_time": "2025-05-13T00:06:54.754828Z"
  }
}

Przykładowy kod

Oto przykładowy kod, który pokazuje, jak wygenerować tło obrazu produktu:

Java

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.productstudio.v1alpha.GenerateImageBackgroundConfig;
import com.google.shopping.merchant.productstudio.v1alpha.GenerateProductImageBackgroundRequest;
import com.google.shopping.merchant.productstudio.v1alpha.GenerateProductImageBackgroundResponse;
import com.google.shopping.merchant.productstudio.v1alpha.ImageServiceClient;
import com.google.shopping.merchant.productstudio.v1alpha.ImageServiceSettings;
import com.google.shopping.merchant.productstudio.v1alpha.InputImage;
import com.google.shopping.merchant.productstudio.v1alpha.OutputImageConfig;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to create product images with generated backgrounds. */
public class GenerateProductImageBackgroundSample {

  private static String getName(String accountId) {
    return String.format("accounts/%s", accountId);
  }

  public static void generateProductImageBackground(Config config, String imageUri)
      throws Exception {
    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    ImageServiceSettings imageServiceSettings =
        ImageServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    String name = getName(config.getAccountId().toString());

    // Calls the API and catches and prints any network failures/errors.
    try (ImageServiceClient imageServiceClient = ImageServiceClient.create(imageServiceSettings)) {

      OutputImageConfig outputImageConfig =
          // Set this field to false to return the image bytes in the response instead.
          OutputImageConfig.newBuilder().setReturnImageUri(true).build();

      InputImage inputImage =
          InputImage.newBuilder()
              // You can also use image bytes here instead of a URI.
              .setImageUri(imageUri)
              .build();

      GenerateImageBackgroundConfig generateImageBackgroundConfig =
          GenerateImageBackgroundConfig.newBuilder()
              .setProductDescription("a jar")
              .setBackgroundDescription(
                  "sitting on a cracked stone surface surrounded by a cherry blossom tree and pink"
                      + " and white flowers in the background, high resolution, product"
                      + " photography, strong shadows and lights, creative")
              .build();

      GenerateProductImageBackgroundRequest request =
          GenerateProductImageBackgroundRequest.newBuilder()
              .setName(name)
              .setOutputConfig(outputImageConfig)
              .setInputImage(inputImage)
              .setConfig(generateImageBackgroundConfig)
              .build();

      System.out.println("Sending GenerateProductImageBackground request: " + name);
      GenerateProductImageBackgroundResponse response =
          imageServiceClient.generateProductImageBackground(request);
      System.out.println("Generated product image background response below:");
      System.out.println(response);
    } catch (Exception e) {
      System.out.println("An error has occurred: ");
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    // Replace with your image URI.
    String imageUri =
        "https://services.google.com/fh/files/misc/abundance_intention_bath_salts.jpg";
    generateProductImageBackground(config, imageUri);
  }
}

Usuwanie tła ze zdjęcia produktu

Przykład pokazuje, jak usunąć tło ze zdjęcia produktu.

Żądanie

Treść żądania zawiera obraz (identyfikator URI lub bajty) i opcjonalnie kolor, którym ma zostać zastąpione tło.

Uwagi:

  • Podaj wartości kolorów w formacie RGB w zakresie [0–255].
  • Jeśli nie określisz koloru tła, będzie to przezroczysty obraz RGBA 4-kanałowy.

Oto przykład struktury żądania z użyciem identyfikatora URI obrazu i ustawieniem tła na zielony (0, 255, 0):

POST https://merchantapi.googleapis.com/productstudio/v1alpha/accounts/{ACCOUNT_ID}/generatedImages:removeProductImageBackground

{
   "input_image": {
      "image_uri": "https://services.google.com/fh/files/misc/abundance_intention_bath_salts.jpg"
   },
   "config": {
      "background_color": {
      "red": 0
      "green": 255
      "blue": 0
    }
   }
}

Możesz też wykonać tę samą funkcję, używając surowych bajtów obrazu:

POST https://merchantapi.googleapis.com/productstudio/v1alpha/accounts/{ACCOUNT_ID}/generatedImages:removeProductImageBackground

{
   "input_image": {
      "image_bytes": "b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff'"
   },
   "config": {
      "background_color": {
      "red": 0
      "green": 255
      "blue": 0
    }
   }
}
Odpowiedź

Możesz się spodziewać odpowiedzi takiej jak:

{
  "generated_image": {
    "image_bytes": "b'\x7d\x1b\x8f\x04\x5c\x9e\x23\xf0\x6a\xd1\x4b\x87\x0c\x3e\xa9\x21\xb5'"
    "generation_time": "2025-05-13T00:06:54.754828Z"
  },
}

Jeśli w output_config zasada return_image_uri ma wartość true, będzie to wyglądać tak:

{
  "generated_image": {
    "uri": "https://lh3.googleusercontent.com/gps-generations/AI9LgEsYi83dcMKVV44i3vHDHzz_PJLuPyJHh9iX7IrsZ0ZIIRIS6SB4ovBmr0L9lZ1VNacZ5duwhcJ8Q8mXMYaIEArf2ieC2OuKEhRzVb-UxlkAUpitEpS5-M3Y3Ch3TGhQTZmBJXlsHLTuf0XcPwNHoNxJlgF0v_mQ6DIlPugZKC_WiYN2DNUkJivfr4WvifhMn5NaMKpDwpH4Acj-bdGNQ77M-8sj4SyEu3sHCF8ZtnMvF5DbGIYOJQ"
  }
}

Przykładowy kod

Oto przykładowy kod, który pokazuje, jak usunąć tło zdjęcia produktu:

Java

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.productstudio.v1alpha.ImageServiceClient;
import com.google.shopping.merchant.productstudio.v1alpha.ImageServiceSettings;
import com.google.shopping.merchant.productstudio.v1alpha.InputImage;
import com.google.shopping.merchant.productstudio.v1alpha.OutputImageConfig;
import com.google.shopping.merchant.productstudio.v1alpha.RemoveImageBackgroundConfig;
import com.google.shopping.merchant.productstudio.v1alpha.RemoveProductImageBackgroundRequest;
import com.google.shopping.merchant.productstudio.v1alpha.RemoveProductImageBackgroundResponse;
import com.google.shopping.merchant.productstudio.v1alpha.RgbColor;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to create product images with the background removed. */
public class RemoveProductImageBackgroundSample {

  private static String getName(String accountId) {
    return String.format("accounts/%s", accountId);
  }

  public static void removeProductImageBackground(Config config, String imageUri) throws Exception {
    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    ImageServiceSettings imageServiceSettings =
        ImageServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    String name = getName(config.getAccountId().toString());

    // Calls the API and catches and prints any network failures/errors.
    try (ImageServiceClient imageServiceClient = ImageServiceClient.create(imageServiceSettings)) {

      OutputImageConfig outputImageConfig =
          // Set this field to false to return the image bytes in the response instead.
          OutputImageConfig.newBuilder().setReturnImageUri(true).build();

      InputImage inputImage =
          InputImage.newBuilder()
              // You can also use image bytes here instead of a URI.
              .setImageUri(imageUri)
              .build();

      RemoveImageBackgroundConfig removeImageBackgroundConfig =
          RemoveImageBackgroundConfig.newBuilder()
              // Setting the background color to green. Don't set this field if you want the image
              // to have a RGBA 4-channel transparent image as the background.
              .setBackgroundColor(RgbColor.newBuilder().setRed(0).setGreen(255).setBlue(0))
              .build();

      RemoveProductImageBackgroundRequest request =
          RemoveProductImageBackgroundRequest.newBuilder()
              .setName(name)
              .setOutputConfig(outputImageConfig)
              .setInputImage(inputImage)
              .setConfig(removeImageBackgroundConfig)
              .build();

      System.out.println("Sending RemoveProductImageBackground request: " + name);
      RemoveProductImageBackgroundResponse response =
          imageServiceClient.removeProductImageBackground(request);
      System.out.println("Removed product image background response below:");
      System.out.println(response);
    } catch (Exception e) {
      System.out.println("An error has occurred: ");
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    // Replace with your image URI.
    String imageUri =
        "https://services.google.com/fh/files/misc/abundance_intention_bath_salts.jpg";
    removeProductImageBackground(config, imageUri);
  }
}

Powiększanie zdjęcia produktu

Przykład pokazuje, jak zwiększyć rozdzielczość zdjęcia produktu.

Żądanie

Treść żądania zawiera obraz (URI lub bajty). Oto przykład struktury żądania z użyciem identyfikatora URI obrazu:

POST https://merchantapi.googleapis.com/productstudio/v1alpha/accounts/{ACCOUNT_ID}/generatedImages:upscaleProductImage

{
   "input_image": {
      "image_uri": "https://services.google.com/fh/files/misc/ring_image_400_600.jpg"
   }
}

Możesz też użyć surowych bajtów obrazu:

POST https://merchantapi.googleapis.com/productstudio/v1alpha/accounts/{ACCOUNT_ID}/generatedImages:upscaleProductImage

{
   "input_image": {
      "image_bytes": "b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff'"
   }
}
Odpowiedź

Możesz się spodziewać odpowiedzi w stylu

{
  "generated_image": {
    "image_bytes": "b'\x7d\x1b\x8f\x04\x5c\x9e\x23\xf0\x6a\xd1\x4b\x87\x0c\x3e\xa9\x21\xb5'"
    "generation_time": "2025-05-13T00:06:54.754828Z"
  },
}

Jeśli w output_config, zasada return_image_uri ma wartość true, będzie to wyglądać tak:

{
  "generated_image": {
    "uri": "https://lh3.googleusercontent.com/gps-generations/AI9LgEvIFfK0YaLKvwvIBc9ItJtJGFE6hi25o6-N3Fz6YTw57pFghfIVlCGve7eyJcQkhoAqGAf8NDzW70qjwGOCuHhiouqF2nqxBwCcfDxZPkYRl3h7CIjyev9asJw7x-0g0V_xvurfowZJ0moXu98kmV01A3Thv2ZRlTAiOPYuEb8wnY7EeyD9l48lDdwJgZ4jqxtTgrRbwvpno4NICj9q830RzATiBHuJ_WUFQJiHOMAqbGyrQIWQTQ"
  }
}

Przykładowy kod

Oto przykładowy kod, który pokazuje, jak powiększyć obraz produktu:

Java

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.productstudio.v1alpha.ImageServiceClient;
import com.google.shopping.merchant.productstudio.v1alpha.ImageServiceSettings;
import com.google.shopping.merchant.productstudio.v1alpha.InputImage;
import com.google.shopping.merchant.productstudio.v1alpha.OutputImageConfig;
import com.google.shopping.merchant.productstudio.v1alpha.UpscaleProductImageRequest;
import com.google.shopping.merchant.productstudio.v1alpha.UpscaleProductImageResponse;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to create upscaled product images. */
public class UpscaleProductImageSample {

  private static String getName(String accountId) {
    return String.format("accounts/%s", accountId);
  }

  public static void upscaleProductImage(Config config, String imageUri) throws Exception {
    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    ImageServiceSettings imageServiceSettings =
        ImageServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    String name = getName(config.getAccountId().toString());

    // Calls the API and catches and prints any network failures/errors.
    try (ImageServiceClient imageServiceClient = ImageServiceClient.create(imageServiceSettings)) {

      OutputImageConfig outputImageConfig =
          // Set this field to false to return the image bytes in the response instead.
          OutputImageConfig.newBuilder().setReturnImageUri(true).build();

      InputImage inputImage =
          InputImage.newBuilder()
              // You can also use image bytes here instead of a URI.
              .setImageUri(imageUri)
              .build();

      UpscaleProductImageRequest request =
          UpscaleProductImageRequest.newBuilder()
              .setName(name)
              .setOutputConfig(outputImageConfig)
              .setInputImage(inputImage)
              .build();

      System.out.println("Sending UpscaleProductImage request: " + name);
      UpscaleProductImageResponse response = imageServiceClient.upscaleProductImage(request);
      System.out.println("Upscaled product image response below:");
      System.out.println(response);
    } catch (Exception e) {
      System.out.println("An error has occurred: ");
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    // Replace with your image URI.
    String imageUri = "https://services.google.com/fh/files/misc/ring_image_400_600.jpg";
    upscaleProductImage(config, imageUri);
  }
}

Typowe błędy i problemy

Oto kilka typowych problemów i sposobów ich rozwiązania.

„Wymagany jest obraz wejściowy”

Jeśli pojawi się ten komunikat o błędzie, dodaj input_image w treści żądania:

Error message:
"error": {
    "code": 400,
    "message": "[input_image] Input image is required to generate product image background.",
    "status": "INVALID_ARGUMENT",
 ...
}

„Wymagane jest co najmniej jedno pole obrazu”

Jeśli otrzymasz ten komunikat o błędzie, w treści żądania wypełnij tylko jedno z pól image_uri lub image_bytes.

Error message:
"error": {
    "code": 400,
    "message": "[input_image.image] At least one field of image is required to generate product image background.",
    "status": "INVALID_ARGUMENT",
 ...
}

Na przykład opublikowanie tego spowoduje błąd.

POST https://merchantapi.googleapis.com/productstudio/v1alpha/accounts/{ACCOUNT_ID}/generatedImages:generateProductImageBackground

{
   "config": {
      "product_description": "a jar"
      "background_description": "sitting on a cracked stone surface surrounded by a cherry blossom tree and pink and white flowers in the background, high resolution, product photography, strong shadows and lights, creative"
   }
}

„Do wygenerowania tła obrazu produktu wymagana jest konfiguracja”

Jeśli pojawi się ten błąd, dodaj w treści żądania config i wypełnij pola product_descriptionbackground_description:

Error message:
"error": {
    "code": 400,
    "message": "[config] Config is required to generate product image background.",
    "status": "INVALID_ARGUMENT",
 ...
}

Na przykład opublikowanie tego spowoduje błąd.

POST https://merchantapi.googleapis.com/productstudio/v1alpha/accounts/{ACCOUNT_ID}/generatedImages:generateProductImageBackground

{
   "input_image": {
      "image_uri": "https://services.google.com/fh/files/misc/abundance_intention_bath_salts.jpg"
   }
}

„Do wygenerowania tła obrazu produktu wymagany jest opis produktu”

Jeśli zobaczysz jeden z tych 2 komunikatów o błędzie, upewnij się, że w config znajdują się zarówno product_description, jak i background_description:

Oto przykład braku opisu produktu:

Error message:
"error": {
    "code": 400,
    "message": "[config.product_description] Product description is required to generate product image background.",
    "status": "INVALID_ARGUMENT",
 ...
}

Oto przykład braku opisu tła:

Error message:
"error": {
    "code": 400,
    "message": "[config.background_description] Background description is required to generate product image background.",
    "status": "INVALID_ARGUMENT",
 ...
}

Na przykład wykonanie tego żądania spowoduje błąd.

POST https://merchantapi.googleapis.com/productstudio/v1alpha/accounts/{ACCOUNT_ID}/generatedImages:generateProductImageBackground

{
   "input_image": {
      "image_uri": "https://services.google.com/fh/files/misc/abundance_intention_bath_salts.jpg"
   },
   "config": {
   }
}