Изменение размера больших изображений в App Engine - PullRequest
2 голосов
/ 25 июня 2009

У меня есть приложение в Google App Engine, которое будет принимать загрузки изображений от пользователей. Проблема, которую я предполагаю, заключается в том, что пользователи будут загружать эти изображения непосредственно со своих камер, а размеры файлов часто превышают 1 МБ, что является пределом для API изображения (который будет использоваться для изменения размера изображений).

Каков наилучший способ принять загрузку, скажем, файла изображения размером 1,5 МБ и изменить его размер до 1 МБ?

Ответы [ 3 ]

7 голосов
/ 16 ноября 2010

Хотя это не ясно в документации App Engine, это возможно при использовании комбинации Blobstore и Сервиса управления изображениями.

Вы должны:

  1. Загрузить изображение в Blobstore
  2. Получить изображение из Blobstore
  3. Выполнение манипуляции с изображением с размером менее 1 МБ

Я написал пост об этом -> http://socialappdev.com/uploading-and-re-sizing-large-images-on-app-engine-11-2010.

3 голосов
/ 26 июня 2009

Вот два (похожих) способа решить эту проблему:

  1. Если вы хотите, чтобы все контролировалось самостоятельно, вы можете поместить скрипт изменения размера на ваш сервер, который берет URL-адрес необработанного загруженного изображения (который может быть до 10 МБ из-за ограничения размера ответа HTTP, но вы бы необходимо сохранить его как фрагменты размером 1 МБ в хранилище данных), загрузить его из приложения, изменить его размер и затем POST вернуть обратно в приложение. Конечно, для всего этого взаимодействия потребуется какое-то разрешение, чтобы им нельзя было злоупотреблять. В качестве альтернативы, POST изображение может быть отправлено непосредственно на внешний сервер, но затем вам придется либо отправить данные другой формы обратно в приложение, либо использовать отдельную форму для загрузки изображения.
  2. Воспользуйтесь внешним сервисом обработки изображений. Я бы порекомендовал Picnik . См. их документация по API . Как видите, он позволяет создать форму, которая отправляет изображение непосредственно на свои серверы, затем пользователь может редактировать изображение (и изменять его размер), а затем изображение отправляется обратно на ваш сервер. С этим решением вы должны загрузить изображение в отдельной форме, так как Picnik получает все ваши POST данные.

Я рекомендую пункт 2, поскольку он не требует, чтобы вы обходили ограничения Google App Engine, и поскольку ваши пользователи загружают изображения прямо с камеры, они, возможно, в любом случае захотят что-то с ними сделать (например, обрезать).

1 голос
/ 25 июня 2009

Это загадка. «Очевидный» ответ, использующий google.appengine.api.images.resize , не будет работать, потому что он слишком большой. :) Так что вам придется использовать стороннее программное обеспечение, либо на сервере (что будет сложно из-за ограничений App Engine), либо на тихом (например, загрузчик Java).

...