Хобрук: Ваш путь к мастерству в программировании

Изменение размера больших изображений в App Engine

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

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


Ответы:


1

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

Ты должен:

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

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

16.11.2010
  • Отличный пост в блоге! В документации отмечается следующее: Служба изображений может использовать значение Blobstore в качестве источника преобразования. Размер исходного изображения может достигать максимального размера для значения Blobstore. Служба изображений по-прежнему возвращает преобразованное изображение в приложение, поэтому преобразованное изображение должно быть меньше 1 мегабайта. Это полезно для создания эскизов больших фотографий, загруженных пользователями. 31.12.2010
  • максимальный размер теперь составляет 32 МБ в соответствии с документами, по сравнению с предыдущим ограничением в 1 МБ 29.02.2012

  • 2

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

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

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

    26.06.2009
  • Пикник выглядит аккуратно. Спасибо за ссылку! 26.06.2009

  • 3

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

    25.06.2009
    Новые материалы

    Библиотеки PyTorch и Python для машинного обучения: приложения в здравоохранении с обнимающим лицом…
    В сфере машинного обучения Python выделяется благодаря своей универсальности и набору предлагаемых библиотек. Развитие машинного обучения в здравоохранении можно частично объяснить простотой и..

    «Что за…» очень хорошо представляет мое выражение лица после того, как я увидел это!
    «Что за…» очень хорошо представляет мое выражение лица после того, как я увидел это!

    5 вещей, которые я сделал, чтобы стать профессиональным разработчиком JavaScript
    Чтобы стать профессиональным JS-разработчиком: 1. Практикуйтесь в рутине, 2. Работайте над проектами, 3. Придерживайтесь одного языка, 4. Наблюдайте за чужим кодом, 5. Будьте последовательны..

    От теории к практике: пошаговое руководство по реализации наивного Байеса
    Вы когда-нибудь застревали в проекте классификации, не зная, как точно предсказать результаты для ваших данных? Вы искали более простой и интуитивно понятный алгоритм, который поможет вам достичь..

    #093 | Моделирование вспышки эпидемии с помощью JavaScript — Часть 3
    TLDR: Я сделал симуляцию вспышки эпидемии, в которую можно поиграть здесь . Мой холст, моя сцена Мой HTML — это всего лишь один div с классом stage, и вот как я настроил на нем свой объект..

    numberToString.js (8kyu 16)
    Алгоритм кодовых войн Проблема Нам нужна функция, которая может преобразовать число в строку. 숫자를 문자열로 변환하는 함수를 작성해라. Решение 01 function numberToString(n) { return n.toString(); }..

    Лучшие практики для быстрого изучения языка программирования
    Изучение языка программирования может быть сложной задачей, но при правильном подходе определенно возможно быстро выучить язык программирования. Хорошее понимание языка программирования может..