python 读取图片颜色值生成excel像素画

像素画:

在这里插入图片描述

需要用到的包:

  • 进度条:progressbar
pip install progressbar  -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

 

  • excel:操作包openpyxl
pip install openpyxl -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

 

食用指南:

文件目录:

在这里插入图片描述

运行:

进入程序img2excel_user.py 所在目录,输入:

python  img2excel_user.py  图片地址  excel保存地址(要加上excel名字)

 

例如:

python img2excel_user.py D:\myPythonProgram\img2excel\3.jpg D:\myPythonProgram\img2excel\3.xlsx

 

注意:

进入二级目录的方法:cd .\文件夹名
在这里插入图片描述
若图片太大,生成的文件会打不开,所以准备的图片不能太大:
在这里插入图片描述

源码:

 1 # -*- coding: utf-8 -*-
 2 
 3 from PIL import Image
 4 import openpyxl
 5 import openpyxl.styles
 6 from openpyxl.styles import PatternFill
 7 from openpyxl.utils import get_column_letter
 8 from progressbar import *
 9 
10 def RGB_to_Hex(rgb):
11     """
12     RGB颜色转换成16进制颜色
13     :param rgb:
14     :return:
15     """
16     RGB = rgb.split(',')            # 将RGB格式划分开来
17     color = ''
18     for i in RGB:
19         num = int(i)
20         # 将R、G、B分别转化为16进制拼接转换并大写  hex() 函数用于将10进制整数转换成16进制,以字符串形式表示
21         color += str(hex(num))[-2:].replace('x', '0').upper()
22     return color
23 
24 def img2excel(img_path,excelout_path):
25     """
26     图片转换成excel
27     :param img_path: 图片地址
28     :param excelout_path: excel保存地址
29     :return:
30     """
31     img_src = Image.open(img_path)
32     #宽高
33     img_width=img_src.size[0]
34     img_height=img_src.size[1]
35     print("图片宽%s,高%s"%(img_width,img_height))
36     # 类型
37     # print(img_src.mode)
38     if img_src.mode != "RGB":
39         img_src = img_src.convert('RGB')
40 
41     str_strlist = img_src.load()
42     wb=openpyxl.Workbook()
43     wb.save(excelout_path)
44     wb=openpyxl.load_workbook(excelout_path)
45     sheet=wb["Sheet"]
46     sheet.title="img2excel"
47     cell_width = 1.0
48     cell_height = cell_width * (2.2862 / 0.3612)
49     print("正在疯狂生成excel,请耐心等待...")
50     #进度条
51     widgets=['进度:',Percentage(),'',Bar('#'),'',Timer(),' ', ETA(), ' ']
52     pb=ProgressBar(widgets=widgets)
53     for w in pb(range(img_width)):
54         for h in range(img_height):
55             data = str_strlist[w,h]
56             # 把元组rgb颜色变成字符串,转换成16进制颜色(1,2,3)-->'1,2,3'
57             color=str(data).replace("(","").replace(")","")
58             #16进制的颜色,不带前面#号的,要#自己拼接到color前面即可
59             color=RGB_to_Hex(color)
60             # 设置填充颜色为color,solid参数表示填充实色
61             fille=PatternFill("solid",fgColor=color)
62             sheet.cell(h+1,w+1).fill=fille
63     print("生成完成,正在设置单元格格式...")
64     for i in range(1, sheet.max_row+1):
65         sheet.row_dimensions[i].height=cell_height
66     for i in range(1, sheet.max_column+1):
67         sheet.column_dimensions[get_column_letter(i)].width = cell_width
68     print('格式设置完成,正在保存excel...')
69     wb.save(excelout_path)
70     img_src.close()
71     print("保存excel成功!请打开[%s]查看"%excelout_path)
72 
73 
74 
75 if __name__=='__main__':
76     import sys,os
77     if len(sys.argv)!=3:
78         print("请输入图片地址和excel保存的地址\n"
79               "例如命令行输入 python img2excel_user.py  D:/result.png  D:/outExcel.xlsx")
80         sys.exit(0)
81     else:
82         img_virify=['.jpg','.png','.gif','.bmp','.jpeg','.jpe','.jfif']
83         excel_virify=['.xlsx','.xlsm','.xltx','.xltm']
84 
85         # 图片地址
86         img_path=sys.argv[1]
87         # excel保存地址
88         excelout_path=sys.argv[2]
89 
90         endName=os.path.splitext(img_path)
91         if endName[1] not in img_virify:
92             print("请选择支持的图片类型",img_virify)
93             sys.exit(0)
94 
95         endName_excel=os.path.splitext(excelout_path)
96         if  endName_excel[1] not in excel_virify:
97             print("excel 格式不支持,请选择支持的格式",excel_virify)
98             sys.exit(0)
99         img2excel(r""+img_path+"",excelout_path)

 

运行:

在这里插入图片描述

原图:

在这里插入图片描述

效果图:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

 

posted @ 2021-02-17 20:39  BugMiaowu2021  阅读(451)  评论(0编辑  收藏  举报