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)
运行:
原图:
效果图: