【小工具】用PIL算法库制作出图片合成工具
喜大普奔,之前寫(xiě)的爬歌工具,閱讀超過(guò)10W,同時(shí)在線使用人數(shù)超過(guò)100人。。。
在眾多同事及好友的邀請(qǐng)下,繼續(xù)出爐了這個(gè)圖片合成的腳本工具。
實(shí)現(xiàn)了分辨率、處理目錄、批量處理參數(shù)的自定義,不同大小圖片九宮格1秒合成!!
使用了這三個(gè)庫(kù)
定義了兩個(gè)函數(shù),第一個(gè)是收集目錄下圖片的集合
第二個(gè)函數(shù)是將收集的圖片進(jìn)行大小調(diào)整,使長(zhǎng)寬一致后可以粘合在一塊。
【以下是成品展覽:】
--==--==--
【善于自定義的可以取源碼,直接拿來(lái)即用,1秒合成則取文章底部打包好的工具】
# -*- coding:utf-8 -*-import os import timefrom PIL import Image# global Image_path, Image_size, Image_row, Image_column, Image_format, Image_save_path global another_pathImage_path = r'E:\待處理圖片\\' # 圖片集地址 Image_format = ['.jpg', '.JPG'] # 預(yù)設(shè)圖片的格式 Image_size = 256 # 每張圖片大小,最終影響的是分辨率 256*256 Image_row = 3 # 圖片間隔,也就是合并成一張圖后有幾行 Image_column = 3 # 圖片間隔,也就是合并成一張圖后有幾列 Image_save_path = 'E:\\待處理圖片\\final.png' # 最終形成的圖片while 1:is_exist = input(r'①請(qǐng)確認(rèn)電腦是否已經(jīng)有E:\待處理圖片 或替換了路徑,是/否: ')another_path = Noneif is_exist.strip() == '是':print(' 恭喜!路徑OK.')breakelse:print(' ~~~您可以替換路徑,替換后需確認(rèn)答復(fù)“是”~~~')another_path = input(r' 請(qǐng)輸入您的正確圖片地址,必要時(shí),路徑中每個(gè)文件夾都以\\隔開(kāi): ')if not another_path:print('您必須輸入新路徑的地址@huzk')another_path = Falseif '\\' in another_path[-1]: # 處理路徑未以\結(jié)尾的異常Image_path = another_pathelse:Image_path = another_path + '\\'Image_save_path = Image_path + 'final.png' # 圖片目錄變更,應(yīng)同時(shí)修改存儲(chǔ)的絕對(duì)路徑need_size = input('②您是否需要更改成更高分辨率,如有請(qǐng)直接輸入,輸入666即表示為666*666的分辨率[按Enter直接跳過(guò)]. ') if need_size:Image_size = int(need_size.strip())print(' 切換分辨率成功~~~')need_row = input('③請(qǐng)輸入幾行,合成圖片默認(rèn)三行[無(wú)更改,則按Enter直接跳過(guò)] ') need_column = input('④幾列,合成圖片默認(rèn)三列[無(wú)更改,則按Enter直接跳過(guò)] ') if need_row:Image_row = int(need_row.strip()) if need_column:Image_column = int(need_column.strip())update_line = [] update_line.append(Image_path) if another_path is not None else print(' ?沒(méi)有變更路徑') update_line.append(Image_size) if need_size else print(' ?沒(méi)有變更分辨率(固定高寬)') update_line.append(Image_row) if need_row else print(' ?沒(méi)有變更圖片行數(shù)') update_line.append(Image_column) if need_column else print(' ?沒(méi)有變更圖片列數(shù)')print('\n\n 全部配置已更新:' + str(update_line)) if len(update_line) != 0 else print(' 使用的是默認(rèn)配置')def reconfirm():# 獲取圖片集地址下的所有圖片名稱(chēng)image_names = [name for name in os.listdir(Image_path) for item in Image_format ifos.path.splitext(name)[1] == item]# 簡(jiǎn)單的對(duì)于參數(shù)的設(shè)定和實(shí)際圖片集的大小進(jìn)行數(shù)量判斷if len(image_names) != Image_row * Image_column:print('Warn!!!Pictures nums appear some problems.') # 圖片數(shù)量上出現(xiàn)問(wèn)題,請(qǐng)重置Image_row和Image_columnraise ValueError('\n!合成圖片的參數(shù)和要求的數(shù)量不能匹配!\n')else:return image_names# 定義圖像拼接函數(shù) def New_Image(name):to_image = Image.new('RGB', (Image_column * Image_size, Image_row * Image_size)) # 定義的新圖# 循環(huán)遍歷,把每張圖片按順序黏貼到對(duì)應(yīng)位置上for y in range(1, Image_row + 1):for x in range(1, Image_column + 1):from_image = Image.open(Image_path + name[Image_column * (y - 1) + x - 1]).resize((Image_size, Image_size), Image.Resampling.LANCZOS)to_image.paste(from_image, ((x - 1) * Image_size, (y - 1) * Image_size))return to_image.save(Image_save_path) # 保存此圖if __name__ == '__main__':# print(changes_attr())names = reconfirm()if names:New_Image(names) # 運(yùn)行看看else:print('圖片數(shù)量或者名稱(chēng)獲取出錯(cuò), 須符合預(yù)設(shè)格式j(luò)pg...')# New_Image()print('~~~\n運(yùn)行完成,三秒后自動(dòng)關(guān)閉窗口. ')for i in range(3)[::-1]:print(f'窗口關(guān)閉倒計(jì)時(shí): {i + 1} 秒!')time.sleep(1)筆者使用的是python3,如果電腦編譯環(huán)境不同,請(qǐng)直接取工具:
Tips:合成圖片請(qǐng)?jiān)诤侠頂?shù)字范圍內(nèi)命名,或者按名稱(chēng)順序創(chuàng)建對(duì)應(yīng)待合成圖片
目前僅支持windows環(huán)境使用。
考慮后期付費(fèi)支持國(guó)內(nèi)第一圖像識(shí)別的開(kāi)放API,來(lái)AI優(yōu)化圖像。
https://pan.baidu.com/s/1bi1Ana0W3cmksXcmSCMlgQ?pwd=wynb
總結(jié)
以上是生活随笔為你收集整理的【小工具】用PIL算法库制作出图片合成工具的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 华西医院牵手易维帮助台实现精细化IT运维
- 下一篇: 市场营销实务【1】