Visão geral da API Images para Java 8

O App Engine permite manipular dados de imagem usando um serviço dedicado. O serviço de imagens pode manipular imagens, compor várias em uma única imagem, converter formatos e fornecer metadados de imagem, como formato, largura, altura e um histograma de valores de cor.

O Java 8 no App Engine é compatível com classes nativas de manipulação de imagens em Java, como AWT (em inglês) e Java2D (em inglês), e com a API Images do App Engine.

O serviço de imagens pode aceitar dados de imagem diretamente do app ou usar um valor do Google Cloud Storage. O serviço de imagens também pode usar um valor do Cloud Blobstore, mas recomendamos o uso do Cloud Storage.

As imagens armazenadas no Cloud Storage e no Cloud Blobstore podem atingir o valor máximo permitido para o respectivo serviço. A imagem transformada é retornada diretamente para o app e precisa ter menos de 32 megabytes.

Como transformar imagens em Java 8

A API do serviço de imagens permite aplicar transformações a imagens usando um serviço, em vez de realizar o processamento de imagens no servidor de aplicativos. O app prepara um objeto Image com os dados da imagem, e um objeto Transform com instruções sobre como transformar a imagem. O app recebe um objeto ImagesService e chama o método applyTransform() dele com os objetos Image e Transform. O método retorna um objeto Image da imagem transformada.

O app recebe as instâncias ImagesService, Image e Transform que usam 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()));

Várias transformações podem ser combinadas em uma única ação usando-se uma instância CompositeTransform. Consulte a referência da API Images.

Transformações de imagens disponíveis

O serviço de imagens pode redimensionar, girar, virar e cortar imagens, além de ajustar fotografias. Ele também pode compor várias imagens em uma única.

Redimensionar

Você pode redimensionar a imagem mantendo a mesma proporção. Nem a largura nem a altura da imagem redimensionada podem exceder 4.000 pixels.

Girar

É possível girar a imagem em incrementos de 90 graus.

Virar horizontalmente

É possível virar a imagem horizontalmente.

Virar verticalmente

É possível virar a imagem verticalmente.

Cortar

Você pode cortar a imagem usando uma determinada caixa delimitadora.

Estou com sorte

A transformação "Estou com corte" melhora cores escuras e brilhantes em uma imagem, ajusta a cor e otimiza o contraste.

Formatos de imagem

O serviço aceita dados de imagem nos formatos JPEG, PNG, WEBP, GIF (inclusive GIF animado), BMP, TIFF e ICO. As imagens transformadas podem ser retornadas nos formatos JPEG, WEBP e PNG.

Se os formatos de entrada e de saída forem diferentes, o serviço converterá os dados de entrada para o formato de saída antes de realizar a transformação.

Como transformar imagens

O serviço Images usa um valor do Google Cloud Storage ou do Blobstore como origem da imagem em uma transformação. Você tem duas maneiras de transformar imagens:

  1. Usar a classe ImageServiceFactory() permite realizar transformações de imagem simples, como cortar, virar e girar.
  2. Usar getServingUrl() permite redimensionar e recortar dinamicamente as imagens. Dessa maneira, você não precisa armazenar tamanhos de imagem diferentes no servidor. Esse método retorna um URL que exibe a imagem, e as transformações feitas na imagem são codificadas nesse URL. Esta função pressupõe que a imagem não mude. Se ela for modificada depois de receber o URL, você poderá ter resultados inesperados ao usar o URL.

Como usar a classe ImageServiceFactory()

Você poderá transformar imagens do Cloud Storage ou do Blobstore se o tamanho da imagem for menor que o máximo permitido pelo Cloud Storage ou pelo Blobstore. O resultado da transformação é retornado diretamente para app e não pode exceder o limite de resposta da API de 32 megabytes.

Para transformar uma imagem do Cloud Storage ou do Blobstore em Java 8, crie o objeto Image. Para isso, chame o método estático ImageServiceFactory.makeImageFromBlob() e transmita um valor blobstore..BlobKey. O resto da API se comporta normalmente. O método applyTransform() retornará o resultado das transformações ou emitirá um ImageServiceFailureException se o resultado for maior que o tamanho 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()));

Como usar getServingUrl()

O método getServingUrl() permite gerar um URL fixo e dedicado para uma imagem armazenada no Cloud Storage ou no Blobstore. Por exemplo:

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

O URL gerado usa uma infraestrutura de exibição de imagem altamente otimizada e separada do aplicativo. Como é exibida independentemente do aplicativo, a imagem não gera carga e pode ser altamente econômica. O URL retornado por esse método é sempre acessível publicamente, mas não há como ser previsto.

Se você quiser deixar de veicular o URL, exclua-o usando o método deleteServingUrl().

O método retorna um URL codificado com os argumentos de tamanho e corte especificados. Se você não especificar argumentos, o método retornará o URL padrão da imagem. Por exemplo:

http://lhx.ggpht.com/randomStringImageId

É possível redimensionar e cortar a imagem dinamicamente. Basta especificar os argumentos no URL. Os argumentos disponíveis são:

  • =sxx, em que xx é um inteiro de 0 a 2.560 representando, em pixels, o comprimento do lado maior da imagem. Por exemplo, com a adição de =s32, a imagem é redimensionada de modo que a dimensão maior tenha 32 pixels;
  • =sxx-c, em que xx é um número inteiro de 0 a 2.560 que representa, em pixels, o tamanho da imagem cortada, e -c informa ao sistema para cortar a imagem.
# 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

Imagens e o servidor de desenvolvimento

O servidor de desenvolvimento usa a máquina local para realizar os recursos do serviço de imagens.

O servidor de desenvolvimento Java usa a biblioteca ImageIO para simular o serviço de imagens. O recurso avançado de foto "Estou com sorte" não é compatível. O formato de imagem WEBP só será compatível se um plug-in decodificador apropriado tiver sido instalado. O plug-in decodificador Java VP8 pode ser usado, por exemplo. O método getServingUrl não está disponível no servidor de desenvolvimento.

Uma observação sobre exclusão

Para deixar de exibir uma imagem armazenada no Cloud Storage ou no Blobstore, chame o método deleteServingUrl().

Evite excluir as imagens diretamente no Cloud Storage ou no Blobstore porque isso pode deixá-las acessíveis por meio do URL de veiculação.

Os URLs de veiculação deixarão de funcionar se o aplicativo que os criou for desativado ou excluído, mesmo se a imagem subjacente permanecer disponível.

Cotas, limites e preços

Atualmente, não há cobrança adicional pelo uso da API Images. Consulte a página de preços do App Engine.

Cada solicitação da API Images conta para a cota de chamadas da API Image Manipulation. Um app pode realizar várias transformações de uma imagem em uma única chamada de API.

Os dados enviados para o serviço de imagens contam para a cota de dados enviados para a API Images. Os dados recebidos do serviço de imagens contam para a cota de dados recebidos da API Images.

Cada transformação de uma imagem conta para a cota de transformações executadas.

Para mais informações, consulte Cotas. Você pode consultar o uso da cota atual do app visitando a guia Detalhes da cota do Console do Google Cloud Platform.

Além das cotas, os seguintes limites se aplicam ao uso do serviço de imagens:

Limite Valor
tamanho máximo de dados da imagem enviada para o serviço 32 megabytes
tamanho máximo de dados da imagem recebida do serviço 32 megabytes
tamanho máximo da imagem enviada ou recebida do serviço 50 megapixels
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Ambiente padrão do App Engine para Java 8