(PIL) Почему изображение и маска не совпадают?

Программа: Использую либу PIL v8.0.1. Последовательность обработки изображения следующая:

  1. Берется главное изображение shopui.jpg для обработки.
  2. Создаются три прямоугольника с равным периметром.
  3. В каждый прямоугольник загружается по одному изображению в зависимости от номера прямоугольника (img_1, img_2, img_3).
  4. В каждый прямоугольник под изображением подписывается текстовая строка в зависимости от номера прямоугольника (product_1, product_2, product_3).

Код:

    product_1 = f'{data[0][0]} \n Тип артефакта: {data[1][0]} \n Редкость артефакта: {data[3][0]}/5 \n Номер артефакта в коллекции: {data[2][0]}'
    product_2 = f'{data[0][1]} \n Тип артефакта: {data[1][1]} \n Редкость артефакта: {data[3][1]}/5 \n Номер артефакта в коллекции: {data[2][1]}'
    product_3 = f'{data[0][2]} \n Тип артефакта: {data[1][2]} \n Редкость артефакта: {data[3][2]}/5 \n Номер артефакта в коллекции: {data[2][2]}'
    img = Image.open('shopui.png') # 1842x1026
    path1 = f'./artifacts/a_{data[2][0]}.jpg'
    path2 = f'./artifacts/a_{data[2][1]}.jpg'
    path3 = f'./artifacts/a_{data[2][2]}.jpg'
    img_1 = Image.open(path1)
    img_2 = Image.open(path2)
    img_3 = Image.open(path3)
    mask_im = Image.new("L", img_1.size, 0)
    draw1 = ImageDraw.Draw(mask_im)
    draw1.ellipse((140, 50, 260, 170), fill=255)
    mask_im.save('./dst/mask_circle.jpg', quality=95)
    back_im1 = img_1.copy()
    back_im2 = img_2.copy()
    back_im3 = img_3.copy()
    font_size = 30
    font_size_text = 10
    font_color = (0, 0, 0)
    shape1 = [(115, 512), (460, 926)]
    shape2 = [(575, 512), (920, 926)]
    shape3 = [(1035, 512), (1380, 926)]
    draw = ImageDraw.Draw(img)
    draw.rectangle(shape1, fill=(227, 223, 95), outline=(50, 168, 82))
    draw.rectangle(shape2, fill=(227, 223, 95), outline=(50, 168, 82))
    draw.rectangle(shape3, fill=(227, 223, 95), outline=(50, 168, 82))
    back_im1.paste(img, (115, 512), mask_im)
    back_im2.paste(img, (575, 512), mask_im)
    back_im3.paste(img, (1035, 512), mask_im)
    font = ImageFont.truetype("18965.ttf", font_size)
    font_text = ImageFont.truetype("18965.ttf", font_size_text)
    draw.text((580, 726), product_1, font=font_text, encode="UTF-8", fill=font_color)
    draw.text((16, 726), product_2, font=font_text, encode="UTF-8", fill=font_color)
    draw.text((1040, 726), product_3, font=font_text, encode="UTF-8", fill=font_color)
    img.save('out.jpg', quality=95)

Ошибка после вызова программы:

error from callback <bound method SocketHandler.handle_message of <amino.socket.SocketHandler object at 0x00000152BF0E42E0>>: images do not match
  File "C:\Users\1\Desktop\ИНФА\pycharm\venv\lib\site-packages\websocket\_app.py", line 344, in _callback
    callback(*args)
  File "C:\Users\1\Desktop\ИНФА\pycharm\venv\lib\site-packages\amino\socket.py", line 80, in handle_message
    self.client.handle_socket_message(data)
  File "C:\Users\1\Desktop\ИНФА\pycharm\venv\lib\site-packages\amino\client.py", line 345, in handle_socket_message
    return self.callbacks.resolve(data)
  File "C:\Users\1\Desktop\ИНФА\pycharm\venv\lib\site-packages\amino\socket.py", line 204, in resolve
    return self.methods.get(data["t"], self.default)(data)
  File "C:\Users\1\Desktop\ИНФА\pycharm\venv\lib\site-packages\amino\socket.py", line 192, in _resolve_chat_message
    return self.chat_methods.get(key, self.default)(data)
  File "C:\Users\1\Desktop\ИНФА\pycharm\venv\lib\site-packages\amino\socket.py", line 221, in on_text_message
    def on_text_message(self, data): self.call(getframe(0).f_code.co_name, objects.Event(data["o"]).Event)
  File "C:\Users\1\Desktop\ИНФА\pycharm\venv\lib\site-packages\amino\socket.py", line 209, in call
    handler(data)
  File "C:\Users\1\Desktop\python bots\amino_faq\bot.py", line 221, in on_text_message
    show_shop(data)
  File "C:\Users\1\Desktop\python bots\amino_faq\bot.py", line 154, in show_shop
    back_im1.paste(img, (115, 512), mask_im)
  File "C:\Users\1\Desktop\ИНФА\pycharm\venv\lib\site-packages\PIL\Image.py", line 1504, in paste
    self.im.paste(im, box, mask.im)

Проблема и вопрос: У всех изображений расширение .jpg. Каждая строка создается на ура (проверено), маска также правильно создается (изображение маски в формате .jpg появляется), однако программа разрушается при приближении к back_im1.paste(), когда img_1 совмещается с маской и вставляется на главное изображение shopui.jpg. Можете, пожалуйста, подсказать в чем может быть проблема?


Ответы (0 шт):