Форум сайта python.su
Проблема заключается в следующем. Есть картинки, которые нужно ресайзить на лету, а затем сохранять(для последующего preview)
Искал аналогичные проблемы в гугле. Нашёл 2 варианта решения. Но 1 меня не устраивает, т.к. файл сохраняется 2 раза, затем переоткрывается и т.п.
http://spindrop.us/2009/02/21/resizing-image-on-upload-in-django/
Здесь - общая идея - обработать с помощью PIL StringIO обьект, затем сохранить его, затем открыть open, и передать FIle(opened-descriptor)
2-я - Попросту не работает, но идея красива. То же самое, но сохраняем в StringIO обьект, затем на его основании делаем InMemoryUploadedFile.
http://softwaremaniacs.org/forum/django/10881/
и в первой и во второй версии всё делается в _clean методах соответствующих полей.
Вся штука в том, что затем сей обьект, который был получен в _clean-е должен затем использоваться в save формы в виде
table_name.photo.save(string_filename, File_object)
А у нас - InMemoryUploadedFile…..
Расковырял по сорцам и с помощью WingIDE. Пока сделал следующий “костыль” на основании того, что в File(file) есть file.mode, а в InMemoryUploadedFile - его лишь нету…
Сделал класс
class InMemoryUploadedFileWrite(InMemoryUploadedFile):
mode = "w"
memfile = InMemoryUploadedFileWrite(magic, image.field_name, filename, image.content_type, magic.len, image.charset)
upl = File(memfile)
return {'filename': filename, 'content': upl}
table_name.photo.save(filename, upl)
def __clean_upload_img(self, name):
image = self.cleaned_data[name]
Офлайн
http://stackoverflow.com/questions/505868/django-how-do-you-turn-an-inmemoryuploadedfile-into-an-imagefield/506031#506031 это смотрел? я обычно примерно так и делаю
вот вроде то что надо http://snipt.net/danfreak/generate-thumbnails-in-django-with-pil
Офлайн
slav0nicСпасибо огромное. Я сделал не совсем так, как описано там, ибо у меня форма не статическая, а динамическая, да ещё и ажаксовская.
http://stackoverflow.com/questions/505868/django-how-do-you-turn-an-inmemoryuploadedfile-into-an-imagefield/506031#506031 это смотрел? я обычно примерно так и делаю
вот вроде то что надо http://snipt.net/danfreak/generate-thumbnails-in-django-with-pil
Офлайн