(PIL) Почему изображение и маска не совпадают?
Программа: Использую либу PIL v8.0.1. Последовательность обработки изображения следующая:
- Берется главное изображение
shopui.jpgдля обработки. - Создаются три прямоугольника с равным периметром.
- В каждый прямоугольник загружается по одному изображению в зависимости от номера прямоугольника (
img_1,img_2,img_3). - В каждый прямоугольник под изображением подписывается текстовая строка в зависимости от номера прямоугольника (
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. Можете, пожалуйста, подсказать в чем может быть проблема?