19行代碼规脸,把圖片寫到如excel。
小屌絲:魚(yú)哥熊咽,新年快樂(lè)~ ~
小魚(yú):新年快樂(lè)莫鸭,小屌絲,雖然是元旦横殴,但是也算是邁入新的一年了被因,也該有新的形象了。
小屌絲:魚(yú)哥衫仑,你說(shuō)的沒(méi)錯(cuò)啊梨与,新的一年,我要用新的姿勢(shì)去追妹子文狱。
小魚(yú):… 怎么三句不說(shuō)妹子粥鞋,你無(wú)話可說(shuō)了?瞄崇?
小屌絲:妹子是我提升技術(shù)的動(dòng)力呻粹!
小魚(yú):… 好吧,只要你能提升技能苏研,其他的都無(wú)所謂…
小屌絲:呦吼~~ 對(duì)了魚(yú)哥等浊,我記得你有一篇博文,?把文字寫在圖片里?摹蘑。
小魚(yú):對(duì)哦筹燕,不少小伙伴通過(guò)這個(gè)方式,讓自己的女友感動(dòng)了衅鹿。
小屌絲:那能不能把圖片寫在別的地方呢撒踪?
小魚(yú):例如呢?大渤?
小屌絲:excel制妄,word,PDF 等等…
小魚(yú):…唉我去~~
小屌絲:嘿嘿~ ~ 來(lái)嘛 ~ ~
2兼犯、代碼實(shí)戰(zhàn)
2.1 思路
我們今天要分享的,是把圖片寫入到excel中,
注意:
這里說(shuō)的切黔,不是截取一張圖片砸脊,粘貼到excel;
而是通過(guò)像素寫入到excel中纬霞。
我們來(lái)捋一下思路:
準(zhǔn)備源圖片凌埂,目標(biāo)excel;
通過(guò)Pillow 來(lái)讀圖片的取像素(RGB)诗芜;
通過(guò)openpyxl 向excel cell內(nèi)填充十六進(jìn)制色值瞳抓;
最后把轉(zhuǎn)換的RGB像素直接寫入到excel中;
說(shuō)到這里伏恐,就們就來(lái)分步實(shí)現(xiàn)孩哑。
2.2 文件準(zhǔn)備
需要寫入而Excel的源圖片:
2.3 實(shí)戰(zhàn)
2.3.1 安裝
本次需要用到兩個(gè)模塊: Pillow 和 openpyxl 。
老規(guī)矩翠桦, pip 方式安裝:
pipinstallPillow pipinstallopenpyxl
其他方式安裝:
《?Python3横蜒,選擇Python自動(dòng)安裝第三方庫(kù),從此跟pip說(shuō)拜拜O铡丛晌!?》
《?Python3:我低調(diào)的只用一行代碼,就導(dǎo)入Python所有庫(kù)6酚住澎蛛!?》
2.3.2 代碼實(shí)戰(zhàn)
1、色值轉(zhuǎn)換
由于 圖片讀取的像素是RGB值蜕窿,而excel是十六進(jìn)制寫入谋逻,
所以需要定義一個(gè)RGB與十六進(jìn)制轉(zhuǎn)換的函數(shù)
# -*- coding:utf-8 -*-# @Time? : 2022-01-03# @Author : carl_DJ'''
定義RGB 和十六進(jìn)制色值轉(zhuǎn)換函數(shù)
'''defrgb_to_hex(rgb):rgb = rgb.split(',')? ? color =''#循環(huán)遍歷foriinrgb:? ? ? ? num = int(i)? ? ? ? color? += str(hex(num))[-2:].replace('x','0').upper()returncolor
2、圖片轉(zhuǎn)換
此操作是逐行讀取圖片的 RGB 色值渠羞,再將 RGB 色值轉(zhuǎn)換為十六進(jìn)制色值填充到 Excel 的 cell 中斤贰。
# -*- coding:utf-8 -*-# @Time? : 2022-01-03# @Author : carl_DJ'''
逐行讀取圖片中的RGB色值,再將RGB色值轉(zhuǎn)換十六進(jìn)制次询,填充到excel中
'''defimg_to_excel(img_path,excel_path):#讀取源圖片img_src = Image.open(img_path)#設(shè)置圖片寬高img_width = img_src.size[0]? ? img_hight = img_src.size[1]#圖片加載str_strlist = img_src.load()#獲取當(dāng)前的excel文件wb = openpyxl.Workbook()#保存文件wb.save(excel_path)#打開(kāi)excel_path 下的excel文件荧恍,并寫入信息wb = openpyxl.load_workbook(excel_path)? ? cell_width,cell_height =1.0,1.0#設(shè)置excel的寫入頁(yè)sheet = wb['Sheet']#循環(huán)圖片的高與寬,并存入forwinrange(img_width):forhinrange(img_hight):? ? ? ? ? ? data = str_strlist[w,h]? ? ? ? ? ? color = str(data).replace("(","").replace(")","")? ? ? ? ? ? color? = rgb_to_hex(color)#設(shè)置填充顏色為colorfille = PatternFill("solid",fgColor = color)? ? ? ? ? ? sheet.cell(h +1,w +1).fill = fille#循環(huán)遍歷row,讓其全部寫入foriinrange(1,sheet.max_row +1):? ? ? ? sheet.row_dimensions[i].height = cell_height#循環(huán)遍歷column屯吊,讓其全部寫入foriinrange(1,sheet.max_column +1):? ? ? ? sheet.column_dimensions[get_column_letter(i)].width = cell_width#保存文件wb.save(excel_path)#關(guān)閉img_src.close()
3送巡、代碼整合
# -*- coding:utf-8 -*-# @Time? : 2022-01-03# @Author : carl_DJimportopenpyxlfromopenpyxl.stylesimportPatternFillfromopenpyxl.utilsimportget_column_letterfromPILimportImage,ImageFont,ImageDraw,ImageColor'''
色值轉(zhuǎn)換:
從圖片讀取的像素塊色值是 RGB 值,
RGB 和十六進(jìn)制色值轉(zhuǎn)換。
'''defrgb_to_hex(rgb):rgb = rgb.split(',')? ? color =''#循環(huán)遍歷foriinrgb:? ? ? ? num = int(i)? ? ? ? color? += str(hex(num))[-2:].replace('x','0').upper()returncolor'''
圖片轉(zhuǎn)換:
逐行讀取圖片中的RGB色值盒卸,再將RGB色值轉(zhuǎn)換十六進(jìn)制骗爆,填充到excel中
'''defimg_to_excel(img_path,excel_path):#讀取源圖片img_src = Image.open(img_path)#設(shè)置圖片寬高img_width = img_src.size[0]? ? img_hight = img_src.size[1]#圖片加載str_strlist = img_src.load()#獲取當(dāng)前的excel文件wb = openpyxl.Workbook()#保存文件wb.save(excel_path)#打開(kāi)excel_path 下的excel文件,并寫入信息wb = openpyxl.load_workbook(excel_path)? ? cell_width,cell_height =1.0,1.0#設(shè)置excel的寫入頁(yè)sheet = wb['Sheet']#循環(huán)圖片的高與寬蔽介,并存入forwinrange(img_width):forhinrange(img_hight):? ? ? ? ? ? data = str_strlist[w,h]? ? ? ? ? ? color = str(data).replace("(","").replace(")","")? ? ? ? ? ? color? = rgb_to_hex(color)#設(shè)置填充顏色為colorfille = PatternFill("solid",fgColor = color)? ? ? ? ? ? sheet.cell(h +1,w +1).fill = fille#循環(huán)遍歷row,讓其全部寫入foriinrange(1,sheet.max_row +1):? ? ? ? sheet.row_dimensions[i].height = cell_height#循環(huán)遍歷column摘投,讓其全部寫入foriinrange(1,sheet.max_column +1):? ? ? ? sheet.column_dimensions[get_column_letter(i)].width = cell_width#保存文件wb.save(excel_path)#關(guān)閉img_src.close()if__name__ =='__main__':#源圖片地址img_path ='./queue.jgp'#保存excel地址excel_path ='./queue.xlsx'#執(zhí)行img_to_excel(img_path, excel_path)
4煮寡、運(yùn)行結(jié)果
寫到這里,今天的分享就差不多結(jié)束了犀呼。
因?yàn)榻裉煲灿玫搅薖illow幸撕,如果想快速入手,可以參照小魚(yú)的這篇博文《?Python3外臂,10行代碼坐儿,我把情書(shū)寫在她的照片里,她被我的才華征服了宋光。?》
這里小魚(yú)提醒一下貌矿,
如果你的源圖片很大,運(yùn)行完成后罪佳,打開(kāi)Excel會(huì)提示文件損壞逛漫,
因?yàn)镋xcel的行數(shù)有限,導(dǎo)致無(wú)法全部寫完數(shù)據(jù)菇民。
Excel報(bào)錯(cuò)詳情:
xml報(bào)錯(cuò)詳情:
<?xml version="1.0"encoding="UTF-8"standalone="yes"?>