admin管理员组文章数量:1609530
-
首先,可以发现Excel表格可以给每一个格子分别填充颜色(RGB)
-
而且,通过调整格子的长宽,可以调整为方形格子(相当于像素格子)
-
那么便可以开始大胆的创作[疑似某国际手势]
好好填一张图看看效果:
哇的天,太棒了吧
【其实,这是用Python写脚本弄得,不是一格一格填的】
&开始分析
调整格子长宽 | openpyxl库可以 |
---|---|
格子填色 | openpyxl库可以 |
读取图片并获取像素 | pillow库可以(PIL) |
例:
1. 更改行高,列宽
ws.column_dimensions['A'].width = 10 # 更改第A列列宽为10
ws.row_dimensions[1].height = 13.5 # 更改第1行行高为 13.5
------ps:ws为一个可操作的表格对象
2. 填充颜色
wk = openpyxl.load_workbook(r"E:\lala.xlsx")
wk_name = wk.sheetnames
wk_sheet = wk[wk_name[0]]
fille = PatternFill('solid',fgColor='FFBB00') #设置填充颜色【16进制
wk_sheet['C2'].fill = fille # 应用填充样式在C2单元格
3. 获取图片坐标为x,y处的rgb值
rgb = img.getpixel((x, y))
&发现了两个问题
-
首先,设置填充颜色的时候,颜色格式为16进制,而不是PIL读取出来的像素(255,255,255)这类的元组,需要进行转换【如果PIL库有能直接读取16进制颜色的,还请不要吝啬写在评论区,先感谢您】
-
转换规则也很简单,就是把元组中的三个数值分别转换为两位16进制,再依次连接起来
-
def rgb_to_hex(rgb):
rb = list(rgb)
st = ''
for cl in rb:
st += hex(cl)[2:].rjust(2, '0')# 去掉16进制开头的0x,并保证转换后位数为2
if st.count('0')==6: # 不知为何,发现不识别16进制颜色 000000,所以换成000001 影响不大
st = st[:-1] + '1'
return st
-
其次,需要建立表格坐标和图像像素坐标的映射,主要是横坐标[填色时需要用到]
-
表格的横坐标为 A,B…AA,AB…,而像素的坐标则为自然数1,2,3…
-
这个转换,可以把表格横坐标理解为一种“字符26进制”,具体解释参考这篇文章【点击这里】
具体解释看那篇文章,这里直接上代码
【实现了把十进制数转换为对应的Excel列坐标A,B,C,D…AA,AB…】
def ch26(x):
chr26 = [chr(65 + i) for i in range(26)]
zh = ''
while x!=-1:
zh = chr26[x%26] + zh
x = x//26-1
return zh
& 解决了主要的技术问题,那么只需要遍历读图获取像素,转换像素,遍历填图并设置格子长宽。
-
第一步,引出所需要的库和函数
from PIL import Image
from openpyxl.styles import PatternFill
from openpyxl import Workbook
-
第二步,列出原图的地址,以及输出表格文件的地址
img_path = r'c:\lala\hello.png'
out_path = r'c:\lala\hello.xlsx'
-
第三步,打开图片对象,获取表格对象
img = Image.open(img_path)
wb = Workbook()
sheet = wb.worksheets[0]#获取初始工作表
-
第四步,遍历读取像素,并转换后填图【创造方形格子,此处简化为:行高不变,调整列宽至适当值----只用调整任意一行所有格子的列宽】
for y in range(img.size[1]):
for x in range(img.size[0]):
if not y:# 如果是第一行,修改每一格列宽
sheet.column_dimensions[ch26(x)].width = 2.6
rgb = img.getpixel((x, y))
c_hex = rgb_to_hex(rgb)
fills = PatternFill('solid', fgColor=c_hex)
sheet[f'{ch26(x)}{y}'].fill = fills
print('\r Get {}-[{}]//{}-[{}]'.format(x+1, img.size[0], y+1, img.size[1]+1), end='')
wb.save(out_path)
wb.close()
这几步骤有不明白的片段,可以翻一翻前面的分析看。
至此,就完成了,那么稍微加点UI,然后打个包,岂不是更方便食用。肝!肝!肝!
成功
【要 打包资源的评论区留言,或者自己写一下UI再打包也可 】
shawn-pu.lanzouw/icdzxoh
密码:wuhu
python制作枯燥的字符图
PIL Image.paste() 透明像素问题
图片变字符画,其实很简单
干货!Windows频幕二维码识别小工具
python 图片拼接、图片转pdf
今日头条美图爬取,有你想要的
python 精美壁纸、简单爬虫,告别壁纸荒
Python 图片拼心,表白利器
Python 以字成图,花式表白,脱单趁早
奇妙的“字符26进制”
从视频中提取图像
版权声明:本文标题:【Python】 将图片绘制到Excel表格中 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1728571093a1164186.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论