API Google Images per i 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, convertirne i formati, fornire metadati delle immagini come come formato, larghezza, altezza e un istogramma di valori di colore.

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 essere valore consentito per il rispettivo servizio. L'immagine trasformata viene restituita direttamente all'app e deve avere dimensioni inferiori a 32 megabyte.

I bucket Cloud Storage devono utilizzare elenchi di controllo dell'accesso granulari perché l'API Images funzioni. Per i bucket configurati per l'accesso uniforme a livello di bucket, l'API Images non sarà in grado di recuperare le immagini nel bucket e genera 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 Python 2

L'esempio seguente carica i dati immagine da Cloud Datastore, quindi utilizza il metodo Servizio immagini per ridimensionarlo e restituirlo al browser come immagine JPEG.

from google.appengine.api import images
from google.appengine.ext import ndb

import webapp2


class Photo(ndb.Model):
    title = ndb.StringProperty()
    full_size_image = ndb.BlobProperty()


class Thumbnailer(webapp2.RequestHandler):
    def get(self):
        if self.request.get("id"):
            photo = Photo.get_by_id(int(self.request.get("id")))

            if photo:
                img = images.Image(photo.full_size_image)
                img.resize(width=80, height=100)
                img.im_feeling_lucky()
                thumbnail = img.execute_transforms(output_encoding=images.JPEG)

                self.response.headers['Content-Type'] = 'image/jpeg'
                self.response.out.write(thumbnail)
                return

        # Either "id" wasn't provided, or there was no image with that ID
        # in the datastore.
        self.error(404)

Oltre all'API Images, puoi utilizzare anche le trasformazioni fornite nella libreria Python Imaging Library (PIL) nella tua app Python 2.7. Devi semplicemente dichiarare la libreria nella sezione libraries del file app.yaml. Tuttavia, se vuoi usare PIL nel tuo ambiente locale, (utilizzando il server di sviluppo) devi inoltre scaricare e installare PIL o un cuscino a livello locale.

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 una singola 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 orizzontalmente.

Capovolgi verticalmente

Puoi capovolgere l'immagine in verticale.

Ritaglia

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

Mi sento fortunato

Il brano "Mi sento fortunato" Transform consente di migliorare i colori scuri e chiari di un'immagine e consente di regolare il colore e ottimizzare il contrasto.

Formati delle immagini

Il servizio accetta dati di immagine nei formati JPEG, PNG, WEBP, GIF (inclusi GIF), BMP, TIFF e ICO. Le immagini trasformate possono essere restituite nel formato 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 Image() consente di eseguire semplici trasformazioni delle immagini, come ritaglio, capovolgimento e rotazione.
  2. L'utilizzo di get_serving_url() ti consente di ridimensionare e ritagliare le immagini in modo dinamico, quindi non devi archiviare dimensioni diverse delle immagini sul server. Questo metodo restituisce un URL che pubblica l'immagine e le trasformazioni all'immagine sono codificate in questo URL. Questa funzione presuppone che l'immagine non cambi; se viene modificato dopo ottenere l'URL, potresti ottenere risultati imprevisti in seguito all'utilizzo dell'URL.

Utilizzo della classe Image()

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. Nota che il risultato della trasformazione venga restituito direttamente all'app e deve non superare il limite di risposte dell'API di 32 MB.

Per trasformare un'immagine da Cloud Storage o Blobstore in Python 2, anziché impostare l'argomento image_data del costruttore Image con i dati dell'immagine, imposta l'argomento blob_key sulla chiave dell'archivio BLOB il cui valore è l'immagine. Il resto dell'API si comporta come previsto. Il metodo execute_transforms() restituisce il risultato delle trasformazioni o genera un LargeImageError se il risultato è più grande della dimensione massima di 32 megabyte.

from google.appengine.api import images
from google.appengine.ext import blobstore

import webapp2


class Thumbnailer(webapp2.RequestHandler):
    def get(self):
        blob_key = self.request.get("blob_key")
        if blob_key:
            blob_info = blobstore.get(blob_key)

            if blob_info:
                img = images.Image(blob_key=blob_key)
                img.resize(width=80, height=100)
                img.im_feeling_lucky()
                thumbnail = img.execute_transforms(output_encoding=images.JPEG)

                self.response.headers['Content-Type'] = 'image/jpeg'
                self.response.out.write(thumbnail)
                return

        # Either "blob_key" wasn't provided, or there was no value with that ID
        # in the Blobstore.
        self.error(404)

Utilizzo di get_serving_url()

Oltre all'API Images, puoi utilizzare anche le trasformazioni fornite nel Python Imaging Library (PIL) nell'app Python 2.7. A questo scopo, dichiara nelle librerie del file app.yaml.

Per utilizzare PIL nel server di sviluppo, scarica e installa PIL o pillow localmente.

La get_serving_url() consente di generare un URL fisso e dedicato per un'immagine archiviata in Cloud Storage o nell'archivio BLOB. Ad esempio:

url = images.get_serving_url(
    blob_key, size=150, crop=True, secure_url=True)

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. URL restituiti da questo metodo sono sempre accessibili pubblicamente ma non indovinabili.

Se vuoi interrompere la pubblicazione dell'URL, eliminalo utilizzando la funzione delete_serving_url().

Il metodo restituisce un URL codificato con le dimensioni e gli argomenti di ritaglio specificati. Se non specifichi argomenti, il metodo restituisce l'URL predefinito per 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 immagine quindi la sua dimensione più lunga è di 32 pixel.
  • =sxx-c dove xx è un numero intero compreso tra 0 e 2560 che rappresenta il valore ritagliato dimensione immagine 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 il server di sviluppo

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

Il server di sviluppo Python utilizza la Python Imaging Library (PIL) per simulare il servizio Image. Questa libreria non è inclusa nella libreria standard di Python o nell'SDK e deve essere installata distintamente. La puoi usare anche la forchetta pillow. Il formato immagine WEBP è supportato solo se è stato installato un plug-in di decodifica PIL adatto.

Una nota sull'eliminazione

Per interrompere la pubblicazione di un'immagine archiviata in Cloud Storage o Blobstore, chiama la funzione delete_serving_url().

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 sono previsti costi aggiuntivi per l'utilizzo dell'API Images. Consulta: la pagina dei prezzi di App Engine.

Ogni richiesta all'API Images viene conteggiata ai fini delle chiamate all'API Image Manipulation quota. Un'app può eseguire più trasformazioni di un'immagine in una singola API chiamata.

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 vedere utilizzo attuale della quota dell'app visitando la quota della console Google Cloud Dettagli.

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