2016-02-01 2 views
8

Я читал и пробовал различные миниатюрные приложения для Django. Таковы требования:Django easy-thumbnails vs sorl-thumbnail difference

  • Все сгенерированные эскизы должны быть сохранены в ведре S3 отдельно от исходных изображений, то есть отдельный класс для хранения

  • Когда экземпляр изображения удаляется, исходный файл изображения вместе с все созданные эскизы должны быть удалены также

  • Минимизировать дорогие неэффективности, например. Извлечение URL уменьшенного изображения для сериализации в ФПИ не должны смотреть в S3 ведро, чтобы увидеть, если она существует каждый раз, и т.д.

VersatileImageField проваливает первое требование. ImageKit не выполняет второе требование. Третье требование - это то, где меня больше всего смущает; Я пытаюсь информировать себя о лучших практиках, но информация фрагментирована, и я не уверен в принятии решения на основе того, что я узнал до сих пор.

Из того, что я прочитал, у меня сложилось впечатление, что наиболее эффективное поведение будет выглядеть следующим образом:

  • генерировать эскиз сразу после сохранения и предположим, что всегда существует
  • для доступа миниатюру, генерировать URL на основе исходного изображения имя файла и уменьшенные размеры/качество, так как мы знаем, что это, безусловно, существует
  • post_delete будут удалены все эскизы и исходный файл

Мне было бы очень интересно узнать о различиях в подходах, которые легко поддаются эскизам и эскизам сорло (если они совпадают с процессом, который я кратко изложил выше, или если у них есть что-то еще более эффективное), а также преимущества/недостатки в каждой из их методологий.

+0

Как вы решили проблему? – wiesson

+0

@weisson Я пробовал все три из этих приложений, все были несовершенными и слишком упрямыми (нет другого пути для этого). Я использую миниатюру на стороне клиента с pica.js. Кадр изображения загружается непосредственно на S3, без ImageField или подушки. – dtgq

ответ

0

Я не уверен, что это полезно, но в прошлом я использовал простые эскизы, и я уверен, что он делает все, о чем вы просите, если вы немного настроите его , Настройка его с помощью функции сохранения немного сложна, так как функция сохранения не нуждается в настройке, но это не невозможно. Главное, что может вызвать проблемы, заключается в том, что вы должны использовать «сохранить и продолжить редактирование» для доступа и использования опции эскизов. Это не будет видно, пока вы не сделаете это, если вы еще не создали его, поскольку он создан при сохранении.

def save() 
    found_id = self.id 
     super(Team, self).save(*args, **kwargs) 
     if self.image and found_id is None and self.original_image_width and self.original_image_height: 
      self.image = get_thumbnailer(self.image).get_thumbnail({ 
       'size': (self.original_image_width, self.original_image_height) 
      }).name 
     super(Team, self).save(*args, **kwargs) 
+0

Не могли бы вы предоставить примерный фрагмент кода того, как вы настроите функцию сохранения, и как вы будете использовать «сохранение и продолжение редактирования»? Благодарю. – dtgq

+0

В основном, что происходит с «Сохранить и продолжить редактирование», так это то, что функция сохранения создаст URL-адреса easy_thumbnails. В основном вы создадите параметры для первоначальной ширины и высоты изображения, а также то же самое для миниатюры, а также для загрузчика изображений и для сохранения миниатюры в модели – overstreetce