API Images per servizi in bundle legacy

App Engine offre la possibilità di manipolare i dati delle immagini utilizzando un servizio Immagini dedicato. Il servizio Immagini può manipolare le immagini, comporre più immagini in un'unica immagine, convertire i formati delle immagini, fornire metadati delle immagini come formato, larghezza, altezza e un'istogramma dei valori di colore.

Java 8 su App Engine supporta le classi di manipolazione delle immagini native di Java, come AWT e Java2D, insieme all'API App Engine Images.

Il servizio Immagini può accettare i dati delle immagini direttamente dall'app oppure può utilizzare un valore Cloud Storage. Il servizio Immagini può utilizzare anche un valore Cloud Blobstore, ma consigliamo di utilizzare Cloud Storage.

Le immagini archiviate in Cloud Storage e Cloud Blobstore possono raggiungere il valore massimo consentito per il rispettivo servizio. L'immagine trasformata viene restituita direttamente all'app e deve avere dimensioni inferiori a 32 megabyte.

Affinché l'API Images funzioni, i bucket Cloud Storage devono utilizzare elenchi di controllo dell'accesso granulari. Per i bucket configurati per l'accesso uniforme a livello di bucket, l'API Images non potrà recuperare le immagini al loro interno e verrà visualizzato il messaggio di errore TransformationError. Se il bucket è configurato in questo modo, puoi disattivare l'accesso uniforme a livello di bucket.

Trasformazione delle immagini in Java 8

L'API Image Service ti consente di applicare trasformazioni alle immagini utilizzando un servizio invece di eseguire l'elaborazione delle immagini sul server dell'applicazione. L'app prepara un oggetto Image con i dati immagine da trasformare e un oggetto Transform con le istruzioni su come trasformare l'immagine. L'app riceve un oggetto ImagesService, quindi chiama il relativo metodo applyTransform() con gli oggetti Image e Transform. Il metodo restituisce un oggetto Image dell'immagine trasformata.

L'app ottiene istanze ImagesService, Image e Transform utilizzando ImagesServiceFactory.

// 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()));

È possibile combinare più trasformazioni in un'unica azione utilizzando un'istanzaCompositeTransform. Consulta il riferimento dell'API Images.

Trasformazioni delle immagini disponibili

Il servizio Immagini può ridimensionare, ruotare, capovolgere e ritagliare le immagini, nonché migliorare le fotografie. Può anche comporre più immagini in un'unica immagine.

Ridimensiona

Puoi ridimensionare l'immagine mantenendo le stesse proporzioni. Né la larghezza né l'altezza dell'immagine ridimensionata possono superare i 4000 pixel.

Ruota

Puoi ruotare l'immagine con incrementi di 90 gradi.

Capovolgi orizzontalmente

Puoi capovolgere l'immagine in orizzontale.

Capovolgi verticalmente

Puoi capovolgere l'immagine in verticale.

Ritaglia

Puoi ritagliare l'immagine con un determinato riquadro di delimitazione.

Mi sento fortunato

La trasformazione "Fai il tuo gioco" migliora i colori scuri e chiari di un'immagine, nonché regola il colore e ottimizza il contrasto.

Formati delle immagini

Il servizio accetta dati delle immagini nei formati JPEG, PNG, WEBP, GIF (incluse le GIF animate), BMP, TIFF e ICO. Le immagini trasformate possono essere restituite nei formati JPEG, WEBP e PNG.

Se il formato di input e quello di output sono diversi, il servizio converte i dati di input nel formato di output prima di eseguire la trasformazione.

Trasformazione delle immagini

Il servizio Immagini può utilizzare un valore di Google Cloud Storage o Blobstore come origine dell'immagine per una trasformazione. Esistono due modi per trasformare le immagini:

  1. L'utilizzo della classe ImagesServiceFactory() ti consente di eseguire semplici trasformazioni delle immagini, come ritaglio, capovolgimento e rotazione.
  2. L'utilizzo di getServingUrl() ti consente di ridimensionare e ritagliare dinamicamente le immagini, in modo da non dover memorizzare dimensioni diverse sul server. Questo metodo restituisce un URL che pubblica l'immagine e le trasformazioni dell'immagine sono codificate in questo URL. Questa funzione presuppone che l'immagine non cambi. Se viene modificata dopo che hai ottenuto l'URL, potresti ottenere risultati imprevisti dall'utilizzo dell'URL.

Utilizzo della classe ImagesServiceFactory()

Puoi trasformare le immagini da Cloud Storage o Blobstore se le dimensioni dell'immagine sono inferiori a quelle massime consentite da Cloud Storage o Blobstore. Tieni presente che il risultato della trasformazione viene restituito direttamente all'app e non deve superare il limite di risposta dell'API di 32 megabyte.

Per trasformare un'immagine da Cloud Storage o Blobstore in Java 8, crea l'oggetto Image chiamando il metodo statico ImagesServiceFactory.makeImageFromBlob() e passandogli un valore blobstore.BlobKey. Il resto dell'API si comporta come previsto. Il metodo applyTransform() restituisce il risultato delle trasformazioni o genera un ImagesServiceFailureException se il risultato è più grande della dimensione massima di 32 megabyte.

// 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()));

Utilizzo di getServingUrl()

Il metodo getServingUrl() ti consente di generare un URL fisso e dedicato per un'immagine archiviata in Cloud Storage o Blobstore. Ad esempio:

// 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);

L'URL generato utilizza un'infrastruttura di pubblicazione di immagini altamente ottimizzata, distinta dall'applicazione. Poiché l'immagine viene pubblicata indipendentemente dalla tua app, non genera alcun carico e può essere molto conveniente. L'URL restituito da questo metodo è sempre accessibile pubblicamente, ma non è deducibile.

Se vuoi interrompere la pubblicazione dell'URL, eliminalo utilizzando il metodo deleteServingUrl().

Il metodo restituisce un URL codificato con gli argomenti size e crop specificati. Se non specifichi alcun argomento, il metodo restituisce l'URL predefinito per l'immagine, ad esempio:

http://lhx.ggpht.com/randomStringImageId

Puoi ridimensionare e ritagliare l'immagine in modo dinamico specificando gli argomenti nell'URL. Gli argomenti disponibili sono:

  • =sxx, dove xx è un numero intero compreso tra 0 e 2560 che rappresenta la lunghezza, in pixel, del lato più lungo dell'immagine. Ad esempio, l'aggiunta di =s32 ridimensiona l'immagine in modo che la sua dimensione più lunga sia di 32 pixel.
  • =sxx-c, dove xx è un numero intero compreso tra 0 e 2560 che rappresenta le dimensioni dell'immagine ritagliata in pixel e -c indica al sistema di ritagliare l'immagine.
# 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

Immagini e server di sviluppo

Il server di sviluppo utilizza la tua macchina locale per eseguire le funzionalità del servizio Immagini.

Il server di sviluppo Java utilizza il framework ImageIO per simulare il servizio Immagine. La funzionalità di miglioramento delle foto "Mi sento fortunato" non è supportata. Il formato immagine WEBP è supportato solo se è stato installato un plug-in di decodificatore adatto. Ad esempio, puoi utilizzare il plug-in Java VP8 decoder. Tieni presente che il metodo getServingUrl non è disponibile nel server di sviluppo.

Una nota sull'eliminazione

Per interrompere la pubblicazione di un'immagine archiviata in Cloud Storage o Blobstore, chiama il metodo deleteServingUrl().

Evita di eliminare direttamente le immagini in Cloud Storage o Blobstore, in quanto in questo modo potresti lasciarle accessibili tramite l'URL di pubblicazione.

Gli URL di pubblicazione smetteranno di funzionare se l'applicazione che li ha creati viene disattivata o eliminata, anche se l'immagine sottostante rimane disponibile.

Quote, limiti e prezzi

Al momento non è previsto alcun costo aggiuntivo per l'utilizzo dell'API Images. Consulta la pagina dei prezzi di App Engine.

Ogni richiesta dell'API Images viene conteggiata ai fini della quota Chiamate API di manipolazione delle immagini. Un'app può eseguire più trasformazioni di un'immagine in una singola chiamata API.

I dati inviati al servizio Immagini vengono conteggiati ai fini della quota Dati inviati all'API (Images). I dati ricevuti dal servizio Immagini vengono conteggiati ai fini della quota Dati ricevuti dall'API (Images).

Ogni trasformazione di un'immagine viene conteggiata ai fini della quota Trasformazioni eseguite.

Per ulteriori informazioni, consulta Quote. Puoi visualizzare l'utilizzo corrente della quota della tua app nella scheda Dettagli quota della console Google Cloud.

Oltre alle quote, all'utilizzo del servizio Immagini si applicano i seguenti limiti:

Limite Importo
Dimensioni massime dei dati dell'immagine inviata al servizio 32 megabyte
dimensione massima dei dati dell'immagine ricevuta dal servizio 32 megabyte
Dimensioni massime dell'immagine inviata o ricevuta dal servizio 50 megapixel