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.
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:
- Mithilfe der Klasse ImagesServiceFactory() können Sie einfache Bildtransformationen wie Zuschneiden, Spiegeln und Drehen ausführen.
- 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.
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:
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
, wobeixx
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 |