失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python利用PIL及openpyxl实现图片转为excel表格

python利用PIL及openpyxl实现图片转为excel表格

时间:2022-05-20 03:27:30

相关推荐

python利用PIL及openpyxl实现图片转为excel表格

最开始是看了一个b站视频,他采用了python加vba实现了将一个图片转化在excel表格当中。/video/av55033139?t=300

首先是python代码

这里有个相对陌生的模块pIL(Python Imaging Library),pip install Pillow即可安装

这里分析标量图里各个像素的rgb值,并生成一个txt文件

from PIL import Imageimload=Image.open("C:/Users/thinkpad/Desktop/sunmei.jpg")im=imload.convert("RGB")width,height=im.sizeprint(1)demo=open('rgb2.txt','a')for y in range(height):for x in range(width):rgb=im.getpixel((x,y))rgb=str(rgb)demo.write(rgb[1:-1]+"\t")demo.write("\n")demo.close()

然后用excel将该txt文件打开,进入代码界面,

Sub set_rgb()Dim r As Range, arrFor Each r In Range("A:AOQ")arr = Split(r, ",")r.Interior.Color = RGB(CInt(arr(0)), CInt(arr(1)), CInt(arr(2)))NextEnd Sub

这里的AOQ是根据txt最右边的列名决定的(一定要看清楚!!!),由于这个vba编的有点问题,最后会报错提示下标越界,但是不影响正常结果出现,我也就没纠正。最后将列宽改成2.1-2.2左右(用来使每个单元格近似成一个正方形),最后的最后将每个单元格的数据删除就行了。

效果如下

继续放大看,由一个类似像素点的单元格组合而成。

当然这个是可以优化的,一是没必要保存成txt,直接保存成xlsx即可;二是vba实现的将单元格设置背景颜色的步骤也可以用python实现。整体的思路是先将rgb值直接转移到excel对应的单元格上,这一点用xlwt本应该很简单就能做到,但是!!!!xlwt只支持256列,目前一般的图片都比这个大,所以用xlwt就不行,所以我后来采用的是openpyxl,openpyxl功能很强大,能够设置字体、颜色等各种东西。经过我的研究发现他的设置颜色的值就是#加上十六进制的rgb(真是难为我这个对颜色,rgb啥的一窍不通的小白了),然后保存就比较简单了,最终优化代码如下所示;

from PIL import Imageimport xlwtimport openpyxlfrom openpyxl.styles import PatternFill#因为xlwt无法输入超过256列的数据,所以在这采用oppyxlimload=Image.open("C:/Users/thinkpad/Desktop/tiananmenguangchang.jpg")im=imload.convert("RGB")width,height=im.sizeprint(1)xls=openpyxl.Workbook()demo = xls.create_sheet(u'天安门广场')#demo = xls.get_sheet_by_name(u'天安门广场')#转化函数,由于部分十进制数转化为十六进制会是三位数比如lex(10)=0xa,,需要补0,把它变成Ox0adef changergb(x):if len(x)==3:x='0x0'+x[-1]return(x)for y in range(1,height-1):for x in range(1,width-1):rgb=im.getpixel((x,y))#print(rgb[0],rgb[1],rgb[2])r=changergb(hex(rgb[0]))g = changergb(hex(rgb[1]))b = changergb(hex(rgb[2]))cellcolor = (r + g + b).replace('0x', '')#print(cellcolor)rgb=str(rgb)fill = PatternFill("solid", fgColor=cellcolor)demo.cell(row=y, column=x).value=rgb[1:-1]#向单元格写入rgb值,其实已经没必要,可以注释掉demo.cell(row=y, column=x).fill=fill#想单元格设置填充值xls.save(filename='tiananmenguangchagn.xlsx')

最后用pyinstaller将这些代码打包成了一个exe文件,不需要安装python啥的就能直接使用转化,就是有点大(60m左右)感兴趣的人可以自行提取 链接:/s/1PZS_5mztMoCXkSLrRJ6tmw

提取码:1chb

如果觉得《python利用PIL及openpyxl实现图片转为excel表格》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。