Images API für gebündelte Legacy-Dienste

App Engine ermöglicht Ihnen, Bilddaten mit einem dedizierten Bilderdienst zu bearbeiten. Neben der Bildbearbeitung können Sie mit dem Bilderdienst mehrere Bilder zu einem einzigen Bild zusammenfassen, Bildformate konvertieren, Bildmetadaten wie Format, Breite und Höhe angeben sowie ein Histogramm von Farbwerten anzeigen.

Zusätzlich zur App Engine Images API unterstützt Java 8 für App Engine native Java-Bildbearbeitungsklassen wie AWT und Java2D.

Der Bilderdienst kann Bilddaten direkt von der Anwendung annehmen oder einen Cloud Storage-Wert verwenden. Obwohl der Bilderdienst auch einen Cloud Blobstore-Wert verwenden kann, empfehlen wir die Nutzung von Cloud Storage.

Bilder, die in Cloud Storage und Cloud Blobstore gespeichert werden, können so groß wie der maximal zulässige Wert für den jeweiligen Dienst sein. Das bearbeitete Bild wird direkt an die Anwendung zurückgegeben und muss kleiner als 32 Megabyte sein.

Cloud Storage-Buckets müssen detaillierte Access Control Lists verwenden, damit die Images API funktioniert. Bei Buckets, die für den einheitlichen Zugriff auf Bucket-Ebene konfiguriert wurden, kann die Images API keine Images in diesem Bucket abrufen und gibt die Fehlermeldung TransformationError aus. Wenn Ihr Bucket auf diese Weise konfiguriert ist, können Sie den einheitlichen Zugriff auf Bucket-Ebene deaktivieren.

Bilder in Java 8 transformieren

Mit der Image Service API können Sie mithilfe eines Dienstes Transformationen auf Bilder anwenden, anstelle diese auf dem Anwendungsserver zu bearbeiten. Die Anwendung bereitet ein Image-Objekt mit den zu transformierenden Bilddaten sowie ein Transform-Objekt mit Anleitungen zur Transformation des Bildes vor. Die Anwendung ruft ein ImagesService-Objekt ab und ruft dann die Methode applyTransform() mit den Image- und Transform-Objekten auf. Die Methode gibt ein Image-Objekt des transformierten Bildes zurück.

Die Anwendung ruft ImagesService-, Image- und Transform-Instanzen mithilfe der ImagesServiceFactory ab.

// Get an instance of the imagesService we can use to transform images.
ImagesService imagesService = ImagesServiceFactory.getImagesService();

// Make an image directly from a byte array, and transform it.
Image image = ImagesServiceFactory.makeImage(imageBytes);
Transform resize = ImagesServiceFactory.makeResize(100, 50);
Image resizedImage = imagesService.applyTransform(resize, image);

// Write the transformed image back to a Cloud Storage object.
gcsService.createOrReplace(
    new GcsFilename(bucket, "resizedImage.jpeg"),
    new GcsFileOptions.Builder().mimeType("image/jpeg").build(),
    ByteBuffer.wrap(resizedImage.getImageData()));

Mithilfe einer CompositeTransform-Instanz können mehrere Transformationen zu einer einzigen Aktion zusammengefasst werden. Entsprechende Informationen finden Sie in der Referenz zur Images API.

Verfügbare Bildtransformationen

Mit dem Bilderdienst können Sie die Bildgröße ändern, Bilder drehen, spiegeln und zuschneiden und die Bildqualität verbessern. Außerdem können mehrere Bilder in einem einzelnen Bild zusammengefasst werden.

Größe ändern

Sie können die Größe des Bildes ändern und dabei das Seitenverhältnis beibehalten. Weder die Breite noch die Höhe des skalierten Bildes darf 4.000 Pixel überschreiten.

Drehen

Sie können das Bild in 90-Grad-Schritten drehen.

Horizontal spiegeln

Sie können das Bild horizontal spiegeln.

Vertikal spiegeln

Sie können das Bild vertikal spiegeln.

Zuschneiden

Sie können das Bild mit einem vorgegebenen Begrenzungsrahmen zuschneiden.

Auf gut Glück!

Die Transformation "Auf gut Glück!" verbessert dunkle und helle Farben in einem Bild und passt beide an. Außerdem optimiert sie den Kontrast.

Bildformate

Der Dienst akzeptiert Bilddaten in den Formaten JPEG, PNG, WEBP, GIF (einschließlich animierter GIFs), BMP, TIFF und ICO. Transformierte Bilder können in den Formaten JPEG, WEBP und PNG zurückgegeben werden.

Wenn die Ein- und Ausgabeformate unterschiedlich sind, konvertiert der Dienst die Eingabedaten vor der Transformation in das Ausgabeformat.

Bilder transformieren

Der Bilderdienst kann einen Wert aus Google Cloud Storage oder Blobstore als Bildquelle für eine Transformation verwenden. Zur Transformation von Bildern haben Sie zwei Möglichkeiten:

  1. Mithilfe der Klasse ImagesServiceFactory() können Sie einfache Bildtransformationen wie Zuschneiden, Spiegeln und Drehen ausführen.
  2. Mithilfe von getServingUrl() können Sie Bilder dynamisch skalieren und zuschneiden, sodass Sie keine unterschiedlichen Bildgrößen auf dem Server speichern müssen. Diese Methode gibt eine URL zurück, unter der das Bild bereitgestellt wird, und Umwandlungen am Bild sind in dieser URL codiert. Die Funktion geht davon aus, dass sich das Bild nicht ändert. Wenn es nach dem Abrufen der URL geändert wird, erhalten Sie möglicherweise unerwartete Ergebnisse bei Verwendung der URL.

Verwenden der ImagesServiceFactory()-Klasse

Sie können Bilder aus Cloud Storage oder Blobstore transformieren, solange die Bildgröße kleiner als die in Cloud Storage oder Blobstore maximal zulässige Größe ist. Das Ergebnis der Transformation wird direkt an die Anwendung zurückgegeben und darf das API-Antwortlimit von 32 Megabyte nicht überschreiten.

Zum Transformieren eines Bildes aus Cloud Storage oder Blobstore in Java 8 erstellen Sie das Image-Objekt. Dafür rufen Sie die statische Methode ImagesServiceFactory.makeImageFromBlob() und übergeben sie ihm einen blobstore.BlobKey-Wert. Der Rest der API verhält sich wie erwartet. Die applyTransform()-Methode gibt das Ergebnis der Transformationen zurück oder löst einen ImagesServiceFailureException aus, wenn das Ergebnis größer als die maximale Größe von 32 Megabyte ist.

// Make an image from a Cloud Storage object, and transform it.
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
BlobKey blobKey = blobstoreService.createGsBlobKey("/gs/" + bucket + "/image.jpeg");
Image blobImage = ImagesServiceFactory.makeImageFromBlob(blobKey);
Transform rotate = ImagesServiceFactory.makeRotate(90);
Image rotatedImage = imagesService.applyTransform(rotate, blobImage);

// Write the transformed image back to a Cloud Storage object.
gcsService.createOrReplace(
    new GcsFilename(bucket, "rotatedImage.jpeg"),
    new GcsFileOptions.Builder().mimeType("image/jpeg").build(),
    ByteBuffer.wrap(rotatedImage.getImageData()));

GetServingUrl() verwenden

Mit der Methode getServingUrl() können Sie eine feste, dedizierte URL für ein Bild generieren, das in Cloud Storage oder Blobstore gespeichert ist. Beispiel:

// Create a fixed dedicated URL that points to the GCS hosted file
ServingUrlOptions options = ServingUrlOptions.Builder
        .withGoogleStorageFileName("/gs/" + bucket + "/image.jpeg")
        .imageSize(150)
        .crop(true)
        .secureUrl(true);
String url = imagesService.getServingUrl(options);

Die generierte URL verwendet eine hoch optimierte Infrastruktur zur Bereitstellung von Bildern, die von Ihrer Anwendung getrennt ist. Da das Bild unabhängig von Ihrer Anwendung bereitgestellt wird, entsteht keine Last, was sehr kosteneffektiv sein kann. Die durch diese Methode zurückgegebene URL ist immer öffentlich zugänglich, kann aber nicht erraten werden.

Wenn Sie die URL nicht mehr bereitstellen möchten, löschen Sie sie mit der Methode deleteServingUrl().

Die Methode gibt eine URL zurück, die mit der angegebenen Größe und den Zuschneideargumenten codiert ist. Wenn Sie keine Argumente angeben, gibt die Methode die Standard-URL für das Bild zurück, zum Beispiel:

http://lhx.ggpht.com/randomStringImageId

Sie können das Bild dynamisch skalieren und zuschneiden, wenn Sie die Argumente in der URL angeben. Folgende Argumente sind verfügbar:

  • =sxx, wobei xx eine Ganzzahl von 0 bis 2.560 ist, die die Länge der längsten Seite des Bildes in Pixel angibt. Wenn Sie beispielsweise =s32 hinzufügen, wird die Größe des Bildes so geändert, dass die längste Dimension 32 Pixel beträgt.
  • =sxx-c, wobei xx eine Ganzzahl von 0 bis 2.560 ist, die die Größe des zugeschnittenen Bildes in Pixel angibt. Mit -c wird das System angewiesen, das Bild zuzuschneiden.
# Resize the image to 32 pixels (aspect-ratio preserved)
http://lhx.ggpht.com/randomStringImageId=s32

# Crop the image to 32 pixels
http://lhx.ggpht.com/randomStringImageId=s32-c

Bilder und der Entwicklungsserver

Der Entwicklungsserver verwendet zur Ausführung der Bilderdienstfunktionen Ihren lokalen Rechner.

Zum Simulieren des Bilderdienstes bedient sich der Java-Entwicklungsserver des ImageIO-Frameworks. Die Fotooptimierungsfunktion "Auf gut Glück!" wird nicht unterstützt. Das Bildformat WEBP wird nur unterstützt, wenn ein entsprechendes Decoder-Plug-in installiert wurde. Beispielsweise kann das Java VP8-Decoder-Plug-in verwendet werden. Die Methode getServingUrl ist auf dem Entwicklungsserver nicht verfügbar.

Hinweis zum Löschen

Wenn Sie die Bereitstellung eines in Cloud Storage oder Blobstore gespeicherten Bildes beenden möchten, rufen Sie die Methode deleteServingUrl() auf.

Vermeiden Sie möglichst, Bilder in Cloud Storage oder Blobstore direkt zu löschen, da sie dann unter Umständen nicht mehr über die Bereitstellungs-URL zugänglich sind.

Bereitstellungs-URLs funktionieren nicht mehr, wenn die Anwendung, mit der sie erstellt wurden, deaktiviert oder gelöscht ist, selbst wenn das zugrunde liegende Bild weiterhin verfügbar ist.

Kontingente, Limits und Preise

Bei Verwendung der Images API fallen derzeit keine zusätzlichen Kosten an. Weitere Informationen finden Sie auf der Seite zu App Engine-Preisen.

Jede Images API-Anfrage wird auf das Kontingent der API-Aufrufe zur Bildbearbeitung angerechnet. Eine Anwendung kann mehrere Transformationen für ein Bild in einem einzigen API-Aufruf ausführen.

An den Bilderdienst gesendete Daten werden auf das Kontingent des zur (Images) API gesendeten Datenvolumens angerechnet. Vom Bilderdienst empfangene Daten werden dem Kontingent des von der (Images) API empfangenen Datenvolumens zugeschrieben.

Jede Transformation eines Bildes wird auf das Kontingent für ausgeführte Transformationen angerechnet.

Weitere Informationen finden Sie unter Kontingente. Sie können die aktuelle Kontingentnutzung Ihrer Anwendung auf dem Tab "Kontingentdetails" der Google Cloud Console einsehen.

Neben Kontingenten gelten für die Verwendung des Bilderdienstes folgende Limits:

Limit Menge
Maximale Datengröße des an den Dienst gesendeten Bildes 32 MB
Maximale Datengröße des vom Dienst empfangenen Bildes 32 MB
Maximale Größe des vom Dienst gesendeten oder empfangenen Bildes 50 Megapixel