это кажется довольно простой проблемой, но я не могу понять, что здесь происходит.
По сути, я хотел бы создать две разные миниатюры из одного изображения на модели Django. В итоге происходит то, что кажется, что оно зацикливается и воссоздает одно и то же изображение (при этом каждый раз добавляя подчеркивание к нему), пока оно не выдаст ошибку, что имя файла слишком большое. Итак, вы получите что-то вроде:
OSError: [Errno 36] File name too long: 'someimg________________etc.jpg'
Вот код (метод сохранения на модели Artist):
def save(self, *args, **kwargs):
if self.image:
iname = os.path.split(self.image.name)[-1]
fname, ext = os.path.splitext(iname)
tlname, tsname = fname + '_thumb_l' + ext, fname + '_thumb_s' + ext
self.thumb_large.save(tlname, make_thumb(self.image, size=(250,250)))
self.thumb_small.save(tsname, make_thumb(self.image, size=(100,100)))
super(Artist, self).save(*args, **kwargs)
def make_thumb(infile, size=(100,100)):
infile.seek(0)
image = Image.open(infile)
if image.mode not in ('L', 'RGB'):
image.convert('RGB')
image.thumbnail(size, Image.ANTIALIAS)
temp = StringIO()
image.save(temp, 'png')
return ContentFile(temp.getvalue())
Я не показывал импорт для краткости. Предположим, что в модели Artist есть два поля ImageField: thumb_large и thumb_small.
Способ, которым я проверяю, работает ли он в оболочке:
artist = Artist.objects.get(id=1)
artist.save()
#error here after a little wait (until I assume it generates enough images that the OSError gets raised)
Если это не правильный способ, я буду признателен за любые отзывы. Спасибо!