Descripción general de la API de Imágenes para Java 8

App Engine ofrece la capacidad de manipular datos de imágenes mediante un servicio de imágenes dedicado. El servicio de imágenes puede manipular imágenes, unir varias imágenes en una sola, convertir formatos de imagen, proporcionar metadatos de imagen como formato, ancho, 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 con la API de Imágenes de App Engine.

El servicio de imágenes puede aceptar datos de imagen directamente desde la aplicación o puede usar un valor de Google Cloud Storage. (El servicio de imágenes también puede usar un valor de Cloud Blobstore, pero te recomendamos usar Cloud Storage).

Las imágenes almacenadas en Cloud Storage y en Cloud Blobstore pueden alcanzar el valor máximo permitido para el servicio correspondiente. La imagen transformada se muestra directamente en la aplicación y debe ser inferior a 32 megabytes.

Transforma imágenes en Java 8

La API del servicio de imágenes te permite aplicar transformaciones a las imágenes con un servicio en lugar de realizar el procesamiento de imágenes en el servidor de aplicaciones. La aplicación prepara un objeto Image con los datos de imagen para transformar y un objeto Transform con instrucciones sobre cómo transformar la imagen. La aplicación obtiene un objeto ImagesService y luego llama a su método applyTransform() con los objetos Image y Transform. El método muestra un objeto Image de la imagen transformada.

La aplicación obtiene instancias ImagesService, Image y Transform con 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()));

Las transformaciones múltiples se pueden combinar en una sola acción con una instancia CompositeTransform. Consulta la referencia de la API de Imágenes.

Transformaciones de imagen disponibles

El servicio de imágenes puede cambiar el tamaño, rotar, girar y recortar imágenes, y mejorar fotografías. También puede componer varias imágenes en una sola imagen.

Cambio de tamaño

Puedes cambiar el tamaño de la imagen manteniendo la misma proporción. Ni el ancho ni el alto de la imagen redimensionada pueden exceder los 4,000 píxeles.

Rotación

Puedes rotar la imagen en incrementos de 90 grados.

Giro de forma horizontal

Puedes girar la imagen horizontalmente.

Giro de forma vertical

Puedes girar la imagen verticalmente.

Recorte

Puedes recortar la imagen con un cuadro de límite dado.

Voy a tener suerte

La transformación "Voy a tener suerte" mejora los colores oscuros y brillantes de una imagen, ajusta ambos colores y optimiza el contraste.

Formatos de imagen

El servicio acepta datos de imagen en los formatos JPEG, PNG, WEBP, GIF (incluido GIF animado), BMP, TIFF y también ICO. Las imágenes transformadas se pueden mostrar en los formatos JPEG, WEBP y PNG.

Si el formato de entrada y el formato de salida son diferentes, el servicio convierte los datos de entrada al formato de salida antes de hacer la transformación.

Cómo transformar imágenes

El servicio de imágenes puede usar un valor de Google Cloud Storage o de Blobstore como la fuente de imágenes para una transformación. Hay dos formas de transformar imágenes:

  1. Usar la clase de ImageServiceFactory() te permite hacer transformaciones de imágenes simples, como recortar, girar y rotar.
  2. Usar getServingUrl() te permite cambiar el tamaño de las imágenes y recortarlas de manera dinámica para que no necesites almacenar distintos tamaños de imagen en el servidor. Este método muestra una URL que entrega la imagen, y las transformaciones realizadas a la imagen se codifican en esta URL. Esta función presupone que la imagen no cambia; si se modifica después de obtener la URL, el uso de la URL puede darte resultados inesperados.

Usa la clase de ImageServiceFactory()

Puedes transformar imágenes de Cloud Storage o Blobstore si el tamaño de la imagen es menor que el máximo permitido por Cloud Storage o Blobstore. Ten en cuenta que el resultado de la transformación se muestra directo en la aplicación y no debe exceder el límite de respuesta de la API de 32 megabytes.

A fin de transformar una imagen de Cloud Storage o Blobstore en Java 8, crea el objeto Image. Para ello, llama al método ImageServiceFactory.makeImageFromBlob() y pásale un valor blobstore.BlobKey. El resto de la API se comporta de la manera prevista. El método applyTransform() muestra el resultado de las transformaciones o arroja una ImageServiceFailureException si el resultado es mayor que el tamaño máximo de 32 megabytes.

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

Usa getServingUrl()

El método getServingUrl() te permite generar una URL fija y dedicada para una imagen que se almacena en Cloud Storage o Blobstore. Por ejemplo:

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

La URL generada utiliza una infraestructura de entrega de imágenes altamente optimizada que está separada de tu aplicación. Como la imagen se entrega independientemente de tu aplicación, no genera carga y puede ser altamente rentable. La URL que se muestra con este método siempre es de acceso público, pero no se puede adivinar.

Si deseas dejar de entregar la URL, bórrala con el método deleteServingUrl().

El método muestra una URL codificada con el tamaño especificado y los argumentos de recorte. Si no especificas ningún argumento, el método muestra la URL predeterminada de la imagen, por ejemplo:

http://lhx.ggpht.com/randomStringImageId

Puedes cambiar el tamaño de la imagen y recortarla de forma dinámica especificando los argumentos en la URL. Los argumentos disponibles son los siguientes:

  • =sxx donde xx es un número entero de 0 a 2,560 que representa la longitud en píxeles del lado más largo de la imagen. Por ejemplo, agregar =s32 cambia el tamaño de la imagen para que su dimensión más larga sea de 32 píxeles.
  • =sxx-c donde xx es un número entero de 0 a 2,560 que representa el tamaño de la imagen recortada en píxeles, y -c le pide 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 servidor de desarrollo

El servidor de desarrollo utiliza tu máquina local para realizar las capacidades del servicio de imágenes.

El servidor de desarrollador Java utiliza el marco de trabajo de ImageIO para simular el servicio de imágenes. La característica para mejorar fotos "Voy a tener suerte" no es compatible. El formato de imagen WEBP solo se admite si se instaló un complemento de decodificador adecuado. Puede utilizarse el complemento de codificador de Java VP8, por ejemplo. Ten en cuenta que el método getServingUrl no está disponible en el servidor de desarrollo.

Una nota sobre los elementos borrados

Para dejar de entregar una imagen almacenada en Cloud Storage o en Blobstore, llama el método deleteServingUrl().

Debes evitar borrar imágenes de manera directa en Cloud Storage o Blobstore, ya que hacerlo puede inhabilitar el acceso a estas a través de la URL activa.

Las URL activas dejarán de funcionar si la aplicación que las creó se inhabilita o se borra, incluso si la imagen subyacente permanece disponible.

Cuotas, límites y precios

En este momento el uso de la API de Imágenes no genera ningún cargo adicional. Consulta la página de precios de App Engine.

Cada solicitud de API de Imágenes se considera incluida en 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 de imágenes se consideran dentro de la cuota de datos enviados a la API (de Imágenes). Los datos recibidos del servicio de imágenes se consideran dentro de la cuota de datos recibidos de la API (de Imágenes).

Cada transformación de una imagen se considera dentro de la cuota de transformaciones ejecutadas.

Para obtener más información, consulta Cuotas. Puedes ver el uso de la cuota actual de tu aplicación visitando la pestaña Detalles de cuotas de Google Cloud Platform Console.

Además de las cuotas, se aplican los siguientes límites al uso del servicio de imágenes:

Límite Importe
tamaño máximo de datos de la imagen enviada al servicio 32 megabytes
tamaño máximo de datos de la imagen recibida del servicio 32 megabytes
tamaño máximo de datos de la imagen enviada al servicio o recibida de este 50 megapíxeles
¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Entorno estándar de App Engine para Java 8