2017-10-03 4 views
0

Je crée une application sur Google App Engine. Nous conservons toutes les images sur Google Cloud Storage. Cette application sert des photos avec la méthode get_serving_url. L'application effectue des modifications de taille en modifiant l'URL de diffusion. À ce stade, nous devons obtenir des valeurs de largeur et de hauteur de l'image.Comment puis-je obtenir les valeurs de largeur et de hauteur de l'image sans extraire toutes les données dans Google App Engine?

je peux le faire de cette façon:

blob_key = blobstore.create_gs_key(_gspath) 
data = blobstore.fetch_data(blob_key, 0, 50000) 
raw_image = images.Image(image_data=data) 

Après avoir fait cela, je peux obtenir des valeurs de largeur et de hauteur variables via raw_image. Mais je suppose que ce n'est pas bon. Je ne veux pas récupérer toutes les données car certaines images sont trop grandes. Comment puis-je obtenir cette information sans opération d'extraction de données?

+0

Collectez cette information lorsque les images sont enregistrées en tant que métadonnées sur l'image. Ensuite, vous pouvez effectuer des requêtes/détails de retour sans accéder au blob. –

+0

J'essaie de cette façon. Je vais donner des commentaires sur le résultat. –

Répondre

0

Google App Engine ne fournit pas de méthode intégrée pour obtenir les dimensions d'une image sans la charger en mémoire. Il existe des alternatives que vous pouvez utiliser:

  1. Vous pouvez créer un service en cours d'exécution sur GCE qui récupérera une image de GCS, et retourner la taille. Votre application GAE pourrait alors appeler cela. Cela déplace l'exigence de mémoire à GCE, qui est beaucoup plus capable de le gérer. Si vous n'utilisez que des formats PNG, GIF, BMP et ICO (pas JPEG ou TIFF), vous pouvez simplement récupérer les 26 premiers octets de l'image et les transmettre comme image_data. Cela suffit pour que la classe Images puisse obtenir la largeur et la hauteur.

  2. Si vous contrôlez le processus de téléchargement, vous pouvez stocker la largeur et la hauteur en tant que métadonnées dans GCS. Ensuite, vous n'avez pas besoin d'extraire l'objet GCS, mais simplement ses métadonnées pour obtenir les dimensions.