(原创)xlsxwriter,python excel 写入数据(三)_在excel中画出图片
前面简单的介绍了xlsxwriter库的使用
这次做些有趣的事,在excel中完美画出图片
思路:把一个单元格当成图片的一个像素,再根据像素的RBG值填充单元格背景颜色,当然,要把单元格缩得足够小
所需库
pillow:用于处理图片
xlsxwriter
numpy 把图片RGB数据根据图片尺寸建立数组,当然不用numpy,自己处理也行
先看一下效果,左边是在excel中填充单元格颜色得到的图像,右边为原图片
from PIL import Image
import xlsxwriter
import numpy as np
im = Image.open("D:\\image.jpg") #实例化图片对对象
使用size属性可以看图片的尺寸,宽*高
使用getdata()方法可以获取图片像素的RGB值,
使用numpy按图片宽高创建数组
使用xlsxwriter创建excel并写入单元格背景颜色信息,xlsxwriter的使用方法见之前的分享
因为xlsxwriter颜色格式是按16进制值进行写入的,需要前面获取到的RGB值转换一下
def rgbToHex(RGB):
strs = '#'
for num in RGB:
strs += str(hex(num))[-2:].replace('x', '0').upper()
return strs
另图片大小最好控制在1500*1000以下,图片太大写入会比较慢或卡死,过大打开excel也会很困难
完整代码如下:
from PIL import Image
import xlsxwriter
import numpy as np
def rgbToHex(RGB):
strs = '#'
for num in RGB:
strs += str(hex(num))[-2:].replace('x', '0').upper()
return strs
im = Image.open("D:\\image.jpg")
imdata = im.getdata() #获取图片像素的RGB值
imnp = np.array(imdata)
imarray = imnp.reshape(im.size[1],im.size[0],3)
print(imarray.shape)
wb = xlsxwriter.Workbook("D:\\img.xlsx")
ws = wb.add_worksheet("image")
ws.hide_gridlines(2)
ws.set_column(0,im.size[0],0.1)