img = models.ImageField(upload_to='%s%s' % ('tizers/', randstring())) img_with_watermark = models.ImageField(upload_to='watermark', blank=True, null=True)
Изначально сделал с помощью PIL, но как оказалось анимированные гифки сохранять он не умеет, посему было решено использовать pgmagick.
Код с PIL:
def save(self): imbase = Image.open(self.img) imwater = Image.open('/home/water.png') format = imbase.format if imbase.mode not in ('L', 'RGB'): imbase = imbase.convert('RGB') imbase.paste(imwater,(imbase.size[0]-imwater.size[0],imbase.size[1]-imwater.size[1]),imwater) temp_handle = StringIO() imbase.save(temp_handle, format) temp_handle.seek(0) suf = SimpleUploadedFile(os.path.split(self.img.name)[-1], temp_handle.read(), content_type='image/%s' % format) self.img_with_watermark.save('%s.%s' % (suf.name, format), suf, save=False) super(Tizer, self).save()
При попытке открыть self.img через pgmagick вылетает ошибка:
im = pgmagick.Image(self.img.path)
Python argument types in
Image.__init__(Image, unicode)
did not match C++ signature:
__init__(_object*, Magick::Image)
__init__(_object*, unsigned int, unsigned int, std::string, MagickLib::StorageType, void const*)
…
__init__(_object*)
Пытаюсь открыть так:
im = pgmagick.Image(str(self.img.path))
Аналогичная ошибка вылетает со всеми картинками.