App Engine ofrece la posibilidad de manipular datos de imagen mediante un servicio de imágenes específico. El servicio Imágenes puede manipular imágenes, combinar varias imágenes en una sola, convertir formatos de imagen y proporcionar metadatos de imagen, como el formato, la anchura, la altura y un histograma de valores de color.
El servicio Imágenes puede aceptar datos de imagen directamente de la aplicación o usar un valor de Cloud Storage. El servicio Imágenes también puede usar un valor de Cloud Blobstore, pero recomendamos usar Cloud Storage.
Las imágenes almacenadas en Cloud Storage y Cloud Blobstore pueden tener un tamaño máximo permitido para cada servicio. La imagen transformada se devuelve directamente a la aplicación y debe tener un tamaño inferior a 32 megabytes.
Los segmentos de Cloud Storage deben usar listas de control de acceso detalladas para que funcione la API Images. En los segmentos que se hayan configurado para usar el acceso uniforme a nivel de segmento, la API Images no podrá obtener imágenes de ese segmento y mostrará el mensaje de error TransformationError
. Si tu segmento está configurado de esta forma, puedes inhabilitar el acceso uniforme a nivel de segmento.
Transformar imágenes en Python 2
En el siguiente ejemplo se cargan datos de imagen de Cloud Datastore y, a continuación, se usa el servicio Images para cambiar el tamaño y devolverlos al navegador como una imagen JPEG.
Además de la API Images, también puedes usar las transformaciones que proporciona la biblioteca Python Imaging Library (PIL) en tu aplicación Python 2.7. Solo tienes que declarar la biblioteca en la sección libraries del archivo app.yaml
. Sin embargo, si quieres usar PIL en tu entorno local (con el servidor de desarrollo), también debes descargar e instalar PIL o Pillow de forma local.
Transformaciones de imagen disponibles
El servicio Imágenes puede cambiar el tamaño, girar, voltear y recortar imágenes, así como mejorar fotografías. También permite componer varias imágenes en una sola.
Modificar tamaño
Puedes cambiar el tamaño de la imagen y conservar la misma proporción. Ni la anchura ni la altura de la imagen redimensionada pueden superar los 4000 píxeles.
Girar
Puedes rotar la imagen en incrementos de 90 grados.
Girar horizontalmente
Puedes girar la imagen en sentido horizontal.
Girar verticalmente
Puedes girar la imagen en sentido vertical.
Recortar
Puedes recortar la imagen con un determinado cuadro delimitador.
Voy a tener suerte
La transformación "Voy a tener suerte" mejora los colores oscuros y claros de una imagen, así como el color y el contraste.
Formatos de imagen
El servicio acepta datos de imagen en los formatos JPEG, PNG, WEBP, GIF (incluidos los GIF animados), BMP, TIFF e ICO. Las imágenes transformadas se pueden devolver en formato JPEG, WebP y PNG.
Si el formato de entrada y el de salida son diferentes, el servicio convierte los datos de entrada al formato de salida antes de realizar la transformación.
Transformar imágenes
El servicio Imágenes puede usar un valor de Google Cloud Storage o Blobstore como origen de la imagen para una transformación. Hay dos formas de transformar imágenes:
- La clase Image() te permite realizar transformaciones sencillas en las imágenes, como recortar, voltear y rotar.
- Con get_serving_url(), puede cambiar el tamaño y recortar las imágenes de forma dinámica, por lo que no es necesario que almacene diferentes tamaños de imagen en el servidor. Este método devuelve una URL que muestra la imagen. En esta URL se encuentran codificadas las transformaciones realizadas en la imagen. Esta función da por hecho que la imagen no cambia. Si se modifica después de obtener la URL, es posible que obtengas resultados inesperados al usarla.
Usar la clase Image()
Puedes transformar imágenes de Cloud Storage o Blobstore si su tamaño es inferior al máximo permitido por Cloud Storage o Blobstore. Ten en cuenta que el resultado de la transformación se devuelve directamente a la aplicación y no debe superar el límite de respuesta de la API, que es de 32 megabytes.
Para transformar una imagen de Cloud Storage o Blobstore en Python 2, en lugar de definir el argumento image_data
del constructor Image con los datos de la imagen, define el argumento blob_key
con la clave de Blobstore cuyo valor sea la imagen. El resto del API se comporta según lo esperado. El método execute_transforms()
devuelve el resultado de las transformaciones o genera una excepción LargeImageError
si el resultado es mayor que el tamaño máximo de 32 megabytes.
Usar get_serving_url()
Además de la API Images, también puedes usar las transformaciones que se proporcionan en la biblioteca Python Imaging Library (PIL) en tu aplicación Python 2.7. Para ello, declara la biblioteca en la sección libraries del archivoapp.yaml
.
Para usar PIL en el servidor de desarrollo, descarga e instala PIL o pillow de forma local.
El método get_serving_url() permite generar una URL fija y específica para una imagen almacenada en Cloud Storage o Blobstore. Por ejemplo:
La URL generada usa una infraestructura de publicación de imágenes altamente optimizada que es independiente de tu aplicación. Como la imagen se sirve de forma independiente de tu aplicación, no genera carga y puede ser muy rentable. La URL devuelta por este método siempre es de acceso público, pero no se puede adivinar.
Si quiere dejar de publicar la URL, elimínela con la función delete_serving_url().
El método devuelve una URL codificada con los argumentos de tamaño y recorte especificados. Si no especificas ningún argumento, el método devuelve la URL predeterminada de la imagen. Por ejemplo:
http://lhx.ggpht.com/randomStringImageId
Puedes cambiar el tamaño y recortar la imagen de forma dinámica especificando los argumentos en la URL. Estos son los argumentos disponibles:
=sxx
, dondexx
es un número entero entre 0 y 2560 que representa la longitud, en píxeles, del lado más largo de la imagen. Por ejemplo, si añades=s32
, la imagen se redimensionará de forma que su dimensión más larga sea de 32 píxeles.=sxx-c
, donde xx es un número entero del 0 al 2560 que representa el tamaño de la imagen recortada en píxeles y-c
indica al sistema que recorte la imagen.
# 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
Imágenes y el servidor de desarrollo
El servidor de desarrollo usa tu máquina local para llevar a cabo las funciones del servicio Imágenes.
El servidor de desarrollo de Python usa la biblioteca de imágenes de Python (PIL) para simular el servicio de imágenes. Esta biblioteca no se incluye en la biblioteca estándar de Python ni en el SDK, y debe instalarse por separado. También funciona la bifurcación pillow. El formato de imagen WEBP solo se admite si se ha instalado un complemento de decodificador PIL adecuado.
Nota sobre la eliminación
Para dejar de servir una imagen almacenada en Cloud Storage o Blobstore, llama a la función delete_serving_url().
No debes eliminar imágenes directamente en Cloud Storage o Blobstore, ya que, si lo haces, se podrá acceder a ellas a través de la URL de servicio.
Las URLs de servicio dejarán de funcionar si la aplicación que las creó se inhabilita o se elimina, aunque la imagen subyacente siga estando disponible.
Cuotas, límites y precios
Actualmente, no se aplican cargos adicionales por usar la API Images. Consulta la página de precios de App Engine.
Cada solicitud a la API Images se tiene en cuenta para la cuota de llamadas a la API de manipulación de imágenes. Una aplicación puede realizar varias transformaciones de una imagen en una sola llamada a la API.
Los datos enviados al servicio Imágenes se tienen en cuenta para la cuota Datos enviados a la API (Imágenes). Los datos recibidos del servicio Imágenes se tienen en cuenta en la cuota Datos recibidos de la API (Imágenes).
Cada transformación de una imagen se tiene en cuenta en la cuota Transformaciones ejecutadas.
Para obtener más información, consulta Cuotas. Para ver el uso actual de la cuota de tu aplicación, ve a la pestaña Google Cloud Cuota de la consola > Detalles.
Además de las cuotas, se aplican los siguientes límites al uso del servicio Imágenes:
Límite | Importe |
---|---|
tamaño de datos de imágenes máximo enviado al servicio | 32 megabytes |
tamaño de datos de imágenes máximo recibido del servicio | 32 megabytes |
tamaño de imagen máximo enviado o recibido del servicio | 50 megapíxeles |