【小工具】用PIL算法库制作出图片合成工具
生活随笔
收集整理的這篇文章主要介紹了
【小工具】用PIL算法库制作出图片合成工具
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
喜大普奔,之前寫的爬歌工具,閱讀超過10W,同時在線使用人數(shù)超過100人。。。
在眾多同事及好友的邀請下,繼續(xù)出爐了這個圖片合成的腳本工具。
實現(xiàn)了分辨率、處理目錄、批量處理參數(shù)的自定義,不同大小圖片九宮格1秒合成!!
使用了這三個庫
定義了兩個函數(shù),第一個是收集目錄下圖片的集合
第二個函數(shù)是將收集的圖片進行大小調(diào)整,使長寬一致后可以粘合在一塊。
【以下是成品展覽:】
--==--==--
【善于自定義的可以取源碼,直接拿來即用,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'①請確認電腦是否已經(jīng)有E:\待處理圖片 或替換了路徑,是/否: ')another_path = Noneif is_exist.strip() == '是':print(' 恭喜!路徑OK.')breakelse:print(' ~~~您可以替換路徑,替換后需確認答復(fù)“是”~~~')another_path = input(r' 請輸入您的正確圖片地址,必要時,路徑中每個文件夾都以\\隔開: ')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)同時修改存儲的絕對路徑need_size = input('②您是否需要更改成更高分辨率,如有請直接輸入,輸入666即表示為666*666的分辨率[按Enter直接跳過]. ') if need_size:Image_size = int(need_size.strip())print(' 切換分辨率成功~~~')need_row = input('③請輸入幾行,合成圖片默認三行[無更改,則按Enter直接跳過] ') need_column = input('④幾列,合成圖片默認三列[無更改,則按Enter直接跳過] ') 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(' ?沒有變更路徑') update_line.append(Image_size) if need_size else print(' ?沒有變更分辨率(固定高寬)') update_line.append(Image_row) if need_row else print(' ?沒有變更圖片行數(shù)') update_line.append(Image_column) if need_column else print(' ?沒有變更圖片列數(shù)')print('\n\n 全部配置已更新:' + str(update_line)) if len(update_line) != 0 else print(' 使用的是默認配置')def reconfirm():# 獲取圖片集地址下的所有圖片名稱image_names = [name for name in os.listdir(Image_path) for item in Image_format ifos.path.splitext(name)[1] == item]# 簡單的對于參數(shù)的設(shè)定和實際圖片集的大小進行數(shù)量判斷if len(image_names) != Image_row * Image_column:print('Warn!!!Pictures nums appear some problems.') # 圖片數(shù)量上出現(xiàn)問題,請重置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)遍歷,把每張圖片按順序黏貼到對應(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) # 運行看看else:print('圖片數(shù)量或者名稱獲取出錯, 須符合預(yù)設(shè)格式j(luò)pg...')# New_Image()print('~~~\n運行完成,三秒后自動關(guān)閉窗口. ')for i in range(3)[::-1]:print(f'窗口關(guān)閉倒計時: {i + 1} 秒!')time.sleep(1)筆者使用的是python3,如果電腦編譯環(huán)境不同,請直接取工具:
Tips:合成圖片請在合理數(shù)字范圍內(nèi)命名,或者按名稱順序創(chuàng)建對應(yīng)待合成圖片
目前僅支持windows環(huán)境使用。
考慮后期付費支持國內(nèi)第一圖像識別的開放API,來AI優(yōu)化圖像。
https://pan.baidu.com/s/1bi1Ana0W3cmksXcmSCMlgQ?pwd=wynb
總結(jié)
以上是生活随笔為你收集整理的【小工具】用PIL算法库制作出图片合成工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华西医院牵手易维帮助台实现精细化IT运维
- 下一篇: 市场营销实务【1】