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 serviço de imagens pode aceitar dados de imagem diretamente do app ou usar um valor do 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.
Os buckets do Cloud Storage precisam usar listas de controle de acesso detalhadas para que a API Images funcione. Nos buckets configurados com acesso uniforme no nível do bucket, a API Images não vai conseguir buscar imagens nesse bucket e vai gerar a mensagem de erro TransformationError.
Se o bucket estiver configurado dessa maneira, é possível desativar o acesso uniforme no nível do bucket.
Quando você veicula imagens do Cloud Storage, a API Images usa uma
conta de serviço gerenciada pelo Google, dynamic_image_service@system.gserviceaccount.com,
para buscar a imagem. Isso normalmente é feito para você, mas se essa conta de serviço
não tiver a função Storage Object Viewer no bucket, você poderá ter
erros 403 Forbidden intermitentes. Isso acontece quando a imagem não está
disponível no cache de exibição do Google e precisa ser buscada no bucket de origem.
Para conceder a permissão necessária, execute o seguinte comando gcloud:
gcloud storage buckets add-iam-policy-binding gs://[BUCKET_NAME] \
--member=serviceAccount:dynamic_image_service@system.gserviceaccount.com \
--role=roles/storage.objectViewer
API Image Service
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 Cloud Storage ou do Blobstore como origem da imagem em uma transformação. Você tem duas maneiras de transformar imagens:
- Usar a classe
Image()permite realizar transformações de imagem simples, como cortar, virar e girar. - O uso de get_serving_url() permite redimensionar e cortar imagens de maneira dinâmica. Portanto, não é preciso armazenar no servidor tamanhos diferentes de imagens. Esse método retorna um URL que exibe a imagem e as transformações da imagem são codificadas nesse URL. Essa função presume que a imagem não muda. Se ela for modificada depois que você receber o URL, será possível conseguir resultados inesperados ao usar o URL.
Como usar a classe
Image()
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 vez de definir o
argumento image_data do construtor Image
com os dados da imagem, defina o argumento blob_key como a chave do Blobstore
cujo valor é a imagem. O restante da API se comporta como
esperado.
O método execute_transforms() retorna o resultado das transformações ou gera um LargeImageError se o resultado for maior que o tamanho máximo de 32 megabytes.
Usando
get_serving_url()
O método get_serving_url() permite gerar um URL fixo e dedicado para uma imagem armazenada no Cloud Storage ou no Blobstore.
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étodoFunção
delete_serving_url().
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
Redimensione e recorte a imagem dinamicamente especificando os argumentos no URL. Os argumentos disponíveis são:
=sxx, em quexxé um número inteiro de 0 a 2.560 que representa o comprimento, em pixels, do lado maior da imagem. Por exemplo, adicionar=s32redimensiona a imagem 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 o tamanho da imagem recortada em pixels, e-cinforma ao sistema para recortar 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.
É possível usar o Pillow ou uma interface em Python para o ImageMagick para redimensionar, converter e manipular imagens.
Uma observação sobre exclusão
Para deixar de exibir uma imagem armazenada no Cloud Storage ou no Blobstore, chame
a
função
Função
delete_serving_url().
Você deve evitar excluir diretamente as imagens no Cloud Storage ou no Blobstore, porque isso pode deixá-las acessíveis por meio do URL de disponibilizaçã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 doGoogle Cloud .
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 |