Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Загрузить картинку, узнать размер и габариты, сохранить... [RSS Feed]

#1 Авг. 5, 2009 22:57:00

eug
От:
Зарегистрирован: 2009-08-01
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Загрузить картинку, узнать размер и габариты, сохранить...

Здравствуйте.

Хочу сделать в админке возможность добавлять фотки.
Выглядеть должно примерно как то так:
Есть 2 поля. Одно - url. Второе - обычный file=input
Если я ввожу url - картинка загружается с указанного url'a. Если выбираю файл - соотв загружается с локальной машины.
Дальше нужно определить ширину, высоту и размер картинки, вычислить на основе этих и может быть ещё каких то данных путь для сохранения, сохранить и распихать все данные в таблице.
С джангой (да и с пайтоном вообщем) я знаком очень плохо, поэтому и дело продвигается очень медленно.

Подскажите как это сделать? Я так понимаю, нужно переопределить кучу методов в своей модели? Или может ещё что то нужно…
Делаю не столько с целью дальнейшего использования сколько с целью попрактиковаться.

Заранее спасибо.



Офлайн

#2 Авг. 6, 2009 10:13:47

pochechyev
От:
Зарегистрирован: 2008-02-29
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

Загрузить картинку, узнать размер и габариты, сохранить...

http://docs.djangoproject.com/en/dev/ref/models/fields/#imagefield


а для определение параметров изображение использовать PIL (Python Image Library)

если задача стоит изменить размер изображения то Вам необходимо переопределить метод save() для модели

приблизительно так:

def save(self, *args, **kwargs):
super(ImageFile,self).save(*args, **kwargs)

t_img=Image.open(self.file.path)
t_img.thumbnail(self.thumbnail_size, Image.ANTIALIAS)
t_img.save(self.file.path+"thumb.jpg")
img=Image.open(self.file.path)
img.thumbnail(self.img_size, Image.ANTIALIAS)
img.save(self.file.path)



Отредактировано (Авг. 6, 2009 10:20:35)

Офлайн

#3 Авг. 6, 2009 11:35:46

eug
От:
Зарегистрирован: 2009-08-01
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Загрузить картинку, узнать размер и габариты, сохранить...

ImageField не может сделать следующее:
1. созранить файл не в какой то конкретной папке - а в вычисленной динамически на основе имени файла или других параметров.
с этим я справился созданием своего Storage в котором переопределил метод get_available_name.
2. Узнать размер картинки и занести его соответсвтенно в поле size.
3. Нужно изменить форму в админке. Та что генерируется на основе модели - подходит плохо т.к. требует сразу ввести ширину, высоту, размер. И одновременно url и сам файл. А я хочу указывать либо одно либо другое.
В каком направлении копать дальше?



Офлайн

#4 Авг. 6, 2009 13:48:34

pochechyev
От:
Зарегистрирован: 2008-02-29
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

Загрузить картинку, узнать размер и габариты, сохранить...

eug
2. Узнать размер картинки и занести его соответсвтенно в поле size.
смотрите библиотеку PIL
eug
3. Нужно изменить форму в админке. Та что генерируется на основе модели - подходит плохо т.к. требует сразу ввести ширину, высоту, размер. И одновременно url и сам файл. А я хочу указывать либо одно либо другое.
непонятна задача. как это вводить либо ширину, высоту либо файл ?



Отредактировано (Авг. 6, 2009 13:49:43)

Офлайн

#5 Авг. 6, 2009 14:36:54

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Загрузить картинку, узнать размер и габариты, сохранить...

eug
В каком направлении копать дальше?
Читать документацию.



Офлайн

#6 Авг. 6, 2009 15:33:30

eug
От:
Зарегистрирован: 2009-08-01
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Загрузить картинку, узнать размер и габариты, сохранить...

как это вводить либо ширину, высоту либо файл ?
не ширину и высоту, а либо URL файла - тогда файл нужно загрузить с удаленного хоста. Либо выбрать файл на локальной машине и загрузить.



Офлайн

#7 Авг. 6, 2009 15:41:07

eug
От:
Зарегистрирован: 2009-08-01
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Загрузить картинку, узнать размер и габариты, сохранить...

Daevaorn
eug
В каком направлении копать дальше?
Читать документацию.
Дельный совет ) Если честно вопрос не в реализации, а например как переопределить стандартное поведение модели. Если я сделаю минимум кода (определение модели и регистрация в админке) то форма в админке будет требовать указания всех данных (в том числе ширину и высоту, которые надо вычислять динамически).
Вот давайте на примере ширины и высоты пока. Как сделать чтобы эти поля не выводились и соотв не валидировались, а заполнялись только самим ImageField?



Офлайн

#8 Авг. 6, 2009 23:31:20

eug
От:
Зарегистрирован: 2009-08-01
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Загрузить картинку, узнать размер и габариты, сохранить...

Немного поковырял доку, немного погуглил. Вот на чем застрял. Убрал весь лишний код чтобы не мешало.
Оставил просто поле ввода url. Нужно загрузить этот файл и сохранить обьект в базе.

class HttpImage(models.Model):
url = models.CharField(max_length=255, blank=True)
file = models.FileField(upload_to='i', editable=False)

def save(self, *args, **kwargs):
filename = tempfile.mktemp()
urllib.urlretrieve(self.url, filename)

# проблемма в этом месте. Что нужно сделать чтобы в self.file были
# правильные данные и после вызова save файл скопировался в нужное место
# и обьект сохранился в базу.

super(HttpImage, self).save(*args, **kwargs)



Офлайн

#9 Авг. 22, 2009 16:12:50

romankrv
От:
Зарегистрирован: 2008-05-23
Сообщения: 513
Репутация: +  0  -
Профиль   Отправить e-mail  

Загрузить картинку, узнать размер и габариты, сохранить...

eug
стандартное поведение модели
Это появляется когда man не дочитывашь.

Отредактировано (Авг. 22, 2009 16:13:09)

Офлайн

  • Начало
  • » Django
  • » Загрузить картинку, узнать размер и габариты, сохранить...[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version