相关文章推荐
不开心的开心果  ·  Understanding Deep ...·  1 年前    · 
腼腆的小马驹  ·  mysql ...·  1 年前    · 
博学的企鹅  ·  c - How do I perform ...·  1 年前    · 

(原创)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)