Что делать если библиотека pillow (python) при картинке которая имеет прозрачный фон, при вырисовке ставит черный фон?
У меня есть код на pillow и код на quickchart на котором написана бубликовая диаграмма, при создании диаграммы фон прозрачный (я проверял через im1.show() ), считаю что проблема в самой библиотеке pillow которая создает фон картинке с прозрачным фоном
im = Image.open('prime.png')
qc = QuickChart()
qc.width = 500
qc.height = 300
qc.version = '2'
qc.background_color = ""
qc.config = {
"type": 'doughnut',
"data": {
"datasets": [
{
"data": [43, 21],
"backgroundColor": ['rgb(173 225 232)', 'rgb(33 170 184)'],
"borderWidth": 0,
},
],
},
"options": {
"cutoutPercentage": 80,
"legend": {
"display": "false",
},
"plugins": {
"datalabels": {
"display": "false",
},
},
},
}
url = qc.get_url()
raw = requests.get(url, stream=True).raw
im1 = Image.open(raw)
im1.save("diagramma.png")
diagramma = Image.open("diagramma.png")
Image.Image.paste(im, diagramma, (100, 400))
Ответы (1 шт):
Автор решения: gil9red
Вариант
Вариант
→ Ссылка
Решением будет вставка прозрачного изображения и его же как маску:
Image.Image.paste(im, diagramma, (100, 400), mask=diagramma)
Ниже я покажу другие варианты и почему они не помогут
input.jpg:
Общий код:
# pip install requests
import requests
# pip install pillow
from PIL import Image
# pip install quickchart.io
from quickchart import QuickChart
qc = QuickChart()
qc.width = 500
qc.height = 300
qc.version = '2'
qc.background_color = ""
qc.config = {
"type": 'doughnut',
"data": {
"datasets": [
{
"data": [43, 21],
"backgroundColor": ['rgb(173 225 232)', 'rgb(33 170 184)'],
"borderWidth": 0,
},
],
},
"options": {
"cutoutPercentage": 80,
"legend": {
"display": "false",
},
"plugins": {
"datalabels": {
"display": "false",
},
},
},
}
url = qc.get_url()
raw = requests.get(url, stream=True).raw
diagramma = Image.open(raw)
Вариант input.jpg будет RGB, вставка в него RGBA:
...
img = Image.open('input.jpg')
Image.Image.paste(img, diagramma, (10, 10))
img.save('diagramma-full.png')
Результат:
Вариант input.jpg будет RGB с конвертацией в RGBA, вставка в него RGBA:
...
img = Image.open('input.jpg')
img = img.convert('RGBA')
Image.Image.paste(img, diagramma, (10, 10))
img.save('diagramma-full.png')
Результат:
Использование маски:
...
img = Image.open('input.jpg')
Image.Image.paste(img, diagramma, (10, 10), mask=diagramma)
img.save('diagramma-full.png')
Результат:



