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.
Java 8 en App Engine admite las clases de manipulación de imágenes nativas de Java, como AWT y Java2D, junto con la API Images de App Engine.
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 Java 8
La API del servicio de imágenes te permite aplicar transformaciones a las imágenes mediante un servicio en lugar de procesarlas en el servidor de aplicaciones. La aplicación prepara un objeto Image
con los datos de la imagen que se va a transformar y un objeto Transform
con instrucciones sobre cómo transformar la imagen. La aplicación obtiene un objeto ImagesService
y, a continuación, llama a su método applyTransform()
con los objetos Image
y Transform
. El método devuelve un objeto Image
de la imagen transformada.
La aplicación obtiene instancias de ImagesService
, Image
y Transform
mediante ImagesServiceFactory
.
Se pueden combinar varias transformaciones en una sola acción mediante una instancia de CompositeTransform
. Consulta la referencia de la API Images.
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 ImagesServiceFactory() te permite realizar transformaciones sencillas en las imágenes, como recortar, voltear y rotar.
- Con getServingUrl(), 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 ImagesServiceFactory()
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 Java 8, crea el objeto Image
llamando al método estático ImagesServiceFactory.makeImageFromBlob()
y pasándole un valor blobstore.BlobKey
. El resto del API se comporta según lo esperado. El método applyTransform()
devuelve el resultado de las transformaciones o genera una excepción ImagesServiceFailureException
si el resultado es mayor que el tamaño máximo de 32 megabytes.
Usar getServingUrl()
El método getServingUrl() te permite generar una URL fija y dedicada 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 quieres dejar de publicar la URL, elimínala con el método deleteServingUrl().
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 Java usa el framework ImageIO
para simular el servicio de imágenes. No se admite la función de mejora de fotos "Voy a tener suerte". El formato de imagen WEBP solo se admite si se ha instalado un complemento de decodificador adecuado. Por ejemplo, se puede usar el complemento decodificador Java VP8. Ten en cuenta que el método getServingUrl
no está disponible en el servidor de desarrollo.
Nota sobre la eliminación
Para dejar de servir una imagen almacenada en Cloud Storage o Blobstore, llama al método deleteServingUrl().
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 |