@reb00ter
Django developer

Почему может не работать paste в PIL?

Делаю 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 - проблема та же.
В чём может быть причина?
  • Вопрос задан
  • 386 просмотров
Решения вопроса 1
@reb00ter Автор вопроса
Django developer
в общем вся проблема в типах данных
l = int((image.size[0] - w) / 2)
t = int((image.size[1] - h) / 2)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы