O App Engine oferece a capacidade de manipular dados de imagens através de um serviço de imagens dedicado. O serviço Images pode manipular imagens, compor várias imagens numa única imagem, converter formatos de imagem, fornecer metadados de imagens, como formato, largura, altura e um histograma de valores de cores.
O serviço Images pode aceitar dados de imagens diretamente da app ou pode usar um valor do Cloud Storage. (O serviço Images também pode usar um valor do Cloud Blobstore, mas recomendamos a utilização do Cloud Storage.)
As imagens armazenadas no Cloud Storage e no Cloud Blobstore podem ter até ao valor máximo permitido para o respetivo serviço. A imagem transformada é devolvida diretamente à app e tem de ter menos de 32 megabytes.
Os contentores do Cloud Storage têm de usar listas de controlo de acesso detalhadas para que a API Images funcione. Para contentores que foram configurados para acesso de nível de contentor uniforme, a API Images não vai conseguir obter imagens nesse contentor e apresenta a mensagem de erro TransformationError
. Se o seu contentor estiver configurado desta forma, pode desativar o acesso uniforme ao nível do contentor.
Transformar imagens em Python 2
O exemplo seguinte carrega dados de imagens do Cloud Datastore e, em seguida, usa o serviço Images para redimensioná-los e devolvê-los ao navegador como uma imagem JPEG.
Além da API Images, também pode usar as transformações fornecidas na
Python Imaging Library (PIL) na sua app Python 2.7. Basta declarar a
biblioteca na secção
libraries do ficheiro
app.yaml
. No entanto, se quiser usar o PIL no seu ambiente local (usando o servidor de desenvolvimento), também tem de transferir e instalar o PIL ou o pillow localmente.
Transformações de imagens disponíveis
O serviço Images pode redimensionar, rodar, inverter e recortar imagens, bem como melhorar fotografias. Também pode compor várias imagens numa única imagem.
Redimensionar
Pode redimensionar a imagem mantendo o mesmo formato. Nem a largura nem a altura da imagem redimensionada podem exceder os 4000 píxeis.
Rodar
Pode rodar a imagem em incrementos de 90 graus.
Inverter horizontalmente
Pode virar a imagem na horizontal.
Virar verticalmente
Pode virar a imagem na vertical.
Recortar
Pode recortar a imagem com uma caixa delimitadora específica.
Sinto-me com sorte
A transformação "Estou com sorte" melhora as cores escuras e claras numa imagem e ajusta a cor e otimiza o contraste.
Formatos de imagem
O serviço aceita dados de imagem nos formatos JPEG, PNG, WEBP, GIF (incluindo GIF animado), BMP, TIFF e ICO. As imagens transformadas podem ser devolvidas nos formatos JPEG, WEBP e PNG.
Se o formato de entrada e o formato de saída forem diferentes, o serviço converte os dados de entrada no formato de saída antes de realizar a transformação.
Transformar imagens
O serviço Images pode usar um valor do Google Cloud Storage ou do Blobstore como a origem da imagem para uma transformação. Tem duas formas de transformar imagens:
- A utilização da classe Image() permite-lhe realizar transformações de imagens simples, como recortar, inverter e rodar.
- A utilização de get_serving_url() permite redimensionar e recortar imagens dinamicamente, pelo que não precisa de armazenar diferentes tamanhos de imagens no servidor. Este método devolve um URL que publica a imagem, e as transformações à imagem são codificadas neste URL. Esta função pressupõe que a imagem não se altera. Se for modificada depois de obter o URL, pode obter resultados inesperados ao usar o URL.
Usar a classe Image()
Pode transformar imagens do Cloud Storage ou do Blobstore se o tamanho da imagem for inferior ao máximo permitido pelo Cloud Storage ou pelo Blobstore. Tenha em atenção que o resultado da transformação é devolvido diretamente à 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 no Python 2, em vez de definir o argumento image_data
do construtor Image com os dados da imagem, defina o argumento blob_key
para a chave do Blobstore cujo valor é a imagem. O resto da API funciona conforme esperado. O método execute_transforms()
devolve o resultado das transformações ou gera um LargeImageError
se o resultado for superior ao tamanho máximo de 32 megabytes.
Usar get_serving_url()
Além da API Images, também pode usar as transformações fornecidas na Python Imaging Library (PIL) na sua app Python 2.7. Para tal, declare a biblioteca na secção libraries do ficheiroapp.yaml
.
Para usar a PIL no servidor de desenvolvimento, transfira e instale a PIL ou o pillow localmente.
O método get_serving_url() permite-lhe gerar um URL fixo e dedicado para uma imagem armazenada no Cloud Storage ou no Blobstore. Por exemplo:
O URL gerado usa uma infraestrutura de publicação de imagens altamente otimizada que é separada da sua aplicação. Como a imagem é publicada independentemente da sua app, não gera carga e pode ser muito rentável. O URL devolvido por este método é sempre acessível publicamente, mas não é previsível.
Se quiser parar de publicar o URL, elimine-o através da função delete_serving_url().
O método devolve um URL codificado com os argumentos de tamanho e recorte especificados. Se não especificar nenhum argumento, o método devolve o URL predefinido da imagem, por exemplo:
http://lhx.ggpht.com/randomStringImageId
Pode redimensionar e recortar a imagem dinamicamente especificando os argumentos no URL. Os argumentos disponíveis são:
=sxx
, ondexx
é um número inteiro de 0 a 2560 que representa o comprimento, em píxeis, do lado mais longo da imagem. Por exemplo, adicionar=s32
redimensiona a imagem para que a sua dimensão mais longa seja de 32 píxeis.=sxx-c
, em que xx é um número inteiro de 0 a 2560 que representa o tamanho da imagem recortada em píxeis e-c
indica ao sistema que deve 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 servidor de programação
O servidor de desenvolvimento usa a sua máquina local para executar as capacidades do serviço Images.
O servidor de desenvolvimento Python usa a Python Imaging Library (PIL) para simular o serviço de imagens. Esta biblioteca não está incluída na biblioteca padrão do Python nem no SDK e tem de ser instalada separadamente. O garfo pillow também funciona. O formato de imagem WEBP só é suportado se tiver sido instalado um plug-in de descodificador PIL adequado.
Uma nota sobre a eliminação
Para parar a publicação de uma imagem armazenada no Cloud Storage ou no Blobstore, chame a função delete_serving_url().
Deve evitar eliminar diretamente imagens no Cloud Storage ou no Blobstore, uma vez que, ao fazê-lo, as imagens podem continuar acessíveis através do URL de publicação.
Os URLs de publicação deixam de funcionar se a aplicação que os criou for desativada ou eliminada, mesmo que a imagem subjacente permaneça disponível.
Quotas, limites e preços
Atualmente, não incorre em custos adicionais pela utilização da API Images. Consulte a página de preços do App Engine.
Cada pedido da API Images é contabilizado na quota de chamadas da API Image Manipulation. Uma app pode realizar várias transformações de uma imagem numa única chamada de API.
Os dados enviados para o serviço Images contam para a quota da API (Images) de dados enviados. Os dados recebidos do serviço Images contam para a quota da API Data Received from (Images).
Cada transformação de uma imagem conta para a quota de Transformações executadas.
Para mais informações, consulte o artigo Quotas. Pode ver a utilização atual da quota da sua app visitando o separador Google Cloud Detalhes da quota da consola.
Além das quotas, aplicam-se os seguintes limites à utilização do serviço Images:
Limite | Montante |
---|---|
tamanho máximo dos dados da imagem enviada para o serviço | 32 megabytes |
tamanho máximo dos dados da imagem recebida do serviço | 32 megabytes |
Tamanho máximo da imagem enviada ou recebida do serviço | 50 megapíxeis |