Делаю watermark на django 1.8, python 3.4. На просторах Интернета нашёл способ через imagekit, с вот такой функцией:
def process(self, image):
"""Adds a watermark to an image."""
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
mark = Image.open(os.path.join(BASE_DIR, "static/images/logo.png"))
#mark = self.reduce_opacity(mark, 0.5)
if mark.mode != 'RGBA':
mark = mark.convert('RGBA')
if image.mode != 'RGBA':
image = image.convert('RGBA')
# create a transparent layer the size of the image and draw the
# watermark in that layer.
# scale, but preserve the aspect ratio
ratio = min(
float(image.size[0]-10) / mark.size[0],
float(image.size[1]-10) / mark.size[1]
)
w = int(mark.size[0] * ratio)
h = int(mark.size[1] * ratio)
mark = mark.resize((w, h))
l = (image.size[0] - w) / 2
t = (image.size[1] - h) / 2
layer = Image.new('RGBA', image.size, (0, 0, 0, 0))
layer.paste(mark, (l, t, w, h))
# composite the watermark with the layer
return Image.composite(layer, image, layer)
этот код почему-то вылетает на предпоследней строчке (
layer.paste(mark, (l, t, w, h))
). При этом если её закомментить и просто вернуть
mark
- функция отработает. Трейсом внутрь могу зайти только на 1 уровень, вылетает на аналогичной
self.im.paste(im, box)
, только im там уже не
Image
, а
ImagingCore
.
Думал проблема с библиотеками - загрузил на линуксовый серв, проверил наличие libpng и libjpeg, на всякий случай переустановил PIllow - проблема та же.
В чём может быть причина?