Эта ошибка ValueError: need more than 3 values to unpack
, вероятно, происходит, потому что img.split()
возвращает кортеж из менее чем 4 элементов, в то время как вы unpacking
для 4 переменных, r g b a
. Проверьте длину img.split()
return и присвойте переменной соответственно или используйте индексирование для доступа к первым 3 элементам, таким как
image_parts = img.split()
r = image_parts[0]
g = image_parts[1]
b = image_parts[2]
Обновление:
from PIL import Image
import xlsxwriter
from io import BytesIO
workbook = xlsxwriter.Workbook('filename.xlsx')
worksheet1 = workbook.add_worksheet()
img = Image.open("/home/username/folder/custom-addons/my_module/static/description/logo.png")
image_parts = img.split()
r = image_parts[0]
g = image_parts[1]
b = image_parts[2]
img = Image.merge("RGB", (r, g, b))
fo = BytesIO()
img.save(fo, format='bmp')
worksheet1.insert_image('A1', 'python.png', {'image_data': fi})
workbook.close()
Хорошо, я нашел нужную функцию в библиотеке xlwt
из ее исходного кода.
from PIL import Image
import xlwt
from io import BytesIO
workbook = xlwt.Workbook()
worksheet1 = workbook.add_sheet('Test')
img = Image.open("/home/username/folder/custom-addons/my_module/static/description/logo.png")
image_parts = img.split()
r = image_parts[0]
g = image_parts[1]
b = image_parts[2]
img = Image.merge("RGB", (r, g, b))
fo = BytesIO()
img.save(fo, format='bmp')
worksheet1.insert_bitmap_data(fo.getvalue(),0,0)
workbook.save('filename.xls')
img.close()