最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python實現(xiàn)千圖成像工具的示例代碼

 更新時間:2022年07月26日 16:03:00   作者:鋒小刀  
千圖成像也就是用N張圖片組成一張圖片的效果。這篇文章將利用Python語言編寫一個簡單的千圖成像工具,感興趣的小伙伴可以了解一下

千圖成像也就是用N張圖片組成一張圖片的效果。制作方法有很多的,最常見的如用ps、懶人圖云、foto-mosaik-edda這些制作。

千圖成像的效果我大致分為兩類:一為直接用N張圖片根據(jù)底圖的像素顏色、大小,一張張的組成底圖,如foto-mosaik-edda;二為用N張圖片根據(jù)底圖的像素大小,組成一張與底圖大小相仿的圖片,再把二者合成,經(jīng)調(diào)整透明度而成的圖片,如ps。

第一種算是真正意義的千圖成像,但如果選的圖片不夠底圖的像素顏色匹配,就會造成生成的圖片畸形,但如果選擇的圖片夠好,最終的效果會非常好;第二種的效果就比較平淡了,但對選擇的圖片沒什么要求,生成的圖片比較正常。

二者的效果各有千秋,而本文使用python實現(xiàn)的是第二種方法,最后制成GUI。

前置

本文使用PySimpleGUI進行GUI設(shè)計,PIL、numpy、random 進行圖片處理,os進行文件操作:

import?PySimpleGUI?as?sg
from?PIL?import?Image
import?os
import?numpy?as?np
import?random

相關(guān)庫使用pip命令安裝即可:

pip?install?庫名

GUI制作

為了以后方便使用,不用一次次跑程序,而在原有的程序基礎(chǔ)上進行GUI制作,最后打包成.exe可執(zhí)行文件。

GUI界面設(shè)計

對于GUI界面的功能只需要設(shè)定五個功能即可:

  • 選擇底圖功能
  • 選擇組圖功能
  • 事件展示區(qū)域
  • 啟動工具按鈕
  • 退出工具按鈕

最終設(shè)計代碼如下:

#?主題設(shè)置
sg.theme('LightBrown3')

#?布局設(shè)置
layout?=?[
????[sg.Frame(layout=[
????????[sg.InputText(key='image_file',?size=(32,?1),?font=("微軟雅黑",?10),?enable_events=True),
????????#?設(shè)定能選擇的圖片格式
?????????sg.FileBrowse('選擇底圖',
???????????????????????file_types=(("Text?Files",?"*.png*"),?("Text?Files",?"*.jpg*"),?("Text?Files",?"*.jpeg*")),
???????????????????????font=("微軟雅黑",?12)),

?????????sg.Button('選擇組圖',?font=("微軟雅黑",?12)),
?????????],
????],
????????title='內(nèi)容選擇',?title_color='blue',?font=("微軟雅黑",?10),?relief=sg.RELIEF_SUNKEN,?)],
????[sg.Frame(layout=[
????????[sg.Output(size=(51,?10),?font=("微軟雅黑",?10))],
????],
????????title='信息展示',?title_color='blue',?font=("微軟雅黑",?10),?relief=sg.RELIEF_SUNKEN,?)],

????[sg.Button('開始生成',?font=("微軟雅黑",?12)),
?????sg.Text('',?font=("微軟雅黑",?12),?size=(27,?0)),?sg.Button('退出程序',?font=("微軟雅黑",?12),?button_color='red')]
]
#?創(chuàng)建窗口
window?=?sg.Window('千圖成像',?layout,?font=("微軟雅黑",?12),?default_element_size=(80,?1))
while?True:
????#?退出按鈕
????event,?values?=?window.read()
????if?event?in?(None,?'退出程序'):
????????break
window.close()

界面效果如下:

GUI界面效果

邏輯設(shè)計

獲取圖片時,因為可以輸入路徑,可能會造成保存,所以這里加個判斷;最后把得到的圖片路徑存入列表中。

if?event?==?'image_file':
????files?=?values['image_file']
????if?os.path.exists(files):
????????img_Main_file.append(files)
????else:
????????print('圖片不存在,請重新選擇圖片!')
????????#?彈窗
????????sg.popup('圖片不存在,請重新選擇圖片!')

獲取組圖所在的文件夾路徑,依然把得到的路徑存入列表中:

if?event?==?'選擇組圖':
????files?=?sg.popup_get_folder('請選擇選擇組圖路徑:')
????if?os.path.exists(files):
????????img_secondary_file.append(files)
????else:
????????print('文件不存在,請重新選擇文件')
????????sg.popup('文件不存在,請重新選擇文件')

啟動按鈕,點擊時把兩個列表傳入圖片處理函數(shù)中:

if?event?==?'開始生成':
????if?len(img_Main_file)?and?len(img_secondary_file)?!=?0:
????????img_save(img_Main_file,?img_secondary_file)
????else:
????????sg.popup('未選擇!')

圖片處理

因為無法保證所有圖片的大小都一樣,所以需要經(jīng)過一定的處理。圖片處理使用的庫是PIL和numpy。

修改底圖大小

對于底圖,我們可以稱之為‘容器’,底圖的大小決定其組成圖片的多少,也可以決定組成圖片的像素大小、是否清晰。取出底圖的高寬越多,圖片越大,圖片越清晰;取出底圖百分之十的大小,這個數(shù)值可以增大,但最好不要超過百分之三十。

open_img?=?Image.open('./底圖.jpg')
#?獲取圖片本身寬度、高度
width,?height?=?open_img.size
#?重新計算底圖高寬,加大底圖的像素。取出底圖的10%的高寬,用int進行取整
Increase_width?=?int(width?*?0.10)?*?int(height?*?0.10)
Increase_height?=?((Increase_width?/?width)?*?height?//?round(height?*?0.10))?*?round(height?*?0.10)
#?更改為重新計算的大小
open_img?=?open_img.resize((int(Increase_width),?int(Increase_height)),?Image.ANTIALIAS)

修改組圖大小

把組成圖片的大小修改為底圖的百分之十的大小,這個數(shù)值也可以增大:

#?讀取文件路徑下的圖片,并修改大小
img_matrix?=?[]
for?e?in?os.listdir('./image'):
????#?防止文件夾中出現(xiàn)并圖片格式的文件
????try:
????????img_matrix.append(np.array(Image.open(os.path.join(str(img_files_list[0]),?e)).convert('RGB').resize(
????????????(int(width?*?0.10),?int(height?*?0.10)),?Image.ANTIALIAS)))
????except?OSError?as?e:
????????print(e)

計算圖片填充次數(shù)

上面說過,底圖的大小決定了組成圖片的多少,而下面的代碼就是根據(jù)底圖的大小以及組成圖片的大小計算出主圖能填充多少圖片:

#?計算主圖高寬能填充多少圖片
width_picture_Fill_frequency?=?int(Increase_width?/?int(width?*?0.10))
height_picture_Fill_frequency?=?int(Increase_height?/?int(height?*?0.10))

組圖合成

根據(jù)底圖高寬的10%以及圖片填充次數(shù),得出矩陣,然后把組圖隨機填充到矩陣中:

array_img?=?np.zeros_like(np.array(open_img))
for?i?in?range(width_picture_Fill_frequency):
????for?x?in?range(height_picture_Fill_frequency):
????????array_img[x?*?int(height?*?0.10):(x?+?1)?*?int(height?*?0.10),
????????i?*?int(width?*?0.10):(i?+?1)?*?int(width?*?0.10),?:]?=?random.choice(img_matrix)
array_img?=?Image.fromarray(array_img)

生成的圖片清晰度還是很高的,不過在手機上看比較模糊:

組圖效果

圖片合成

把底圖和組圖進行合并,alpha可以調(diào)整二者的透明度,最佳為0.7、0.8、0.9。

img?=?Image.blend(array_img,?open_img,?alpha=0.8)??#?0.7,0.8,0.9
img.save('千圖成像.jpg')

圖片效果

GUI打包

打包可以直接使用pyinstaller進行安裝;如果你不知道怎么打包,或者不熟悉命令行操作,可以使用前面文章:打包工具,這款打包工具可以簡單的滿足打包需求。

使用pyinstaller庫打包,啟動命令行窗口,在命令行窗口cd到文件所在的文件目錄中,最后用下面命令進行打包:

pyinstaller?-F?-w?名稱.py

打包時可能會報錯:

報錯示例

報錯源于一個hook-sqlalchemy.py文件,一個簡單的解決方法是找到它直接回收刪除它(最后暫未發(fā)現(xiàn)刪除它對打包后的exe文件有什么影響),等打包完成后在放回去即可:

打包過程沒出現(xiàn)什么狀況,會得到幾個文件,進入dist文件夾,就可以看見.exe文件了。

至此,我們就成功利用Python實現(xiàn)了制作千圖成像工具。

到此這篇關(guān)于基于Python實現(xiàn)千圖成像工具的示例代碼的文章就介紹到這了,更多相關(guān)Python千圖成像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 教你用Python+selenium搭建自動化測試環(huán)境

    教你用Python+selenium搭建自動化測試環(huán)境

    今天給大家?guī)淼氖顷P(guān)于Python的相關(guān)知識,文章圍繞著如何用Python+selenium搭建自動化測試環(huán)境展開,文中有非常詳細的介紹,需要的朋友可以參考下
    2021-06-06
  • 詳談python3 numpy-loadtxt的編碼問題

    詳談python3 numpy-loadtxt的編碼問題

    下面小編就為大家分享一篇詳談python3 numpy-loadtxt的編碼問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 解決Python3用PIL的ImageFont輸出中文亂碼的問題

    解決Python3用PIL的ImageFont輸出中文亂碼的問題

    今天小編大家分享一篇解決Python3用PIL的ImageFont輸出中文亂碼的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 使用Python的turtle模塊畫國旗

    使用Python的turtle模塊畫國旗

    這篇文章主要為大家詳細介紹了用Python的turtle模塊畫國旗,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • Django框架 querySet功能解析

    Django框架 querySet功能解析

    這篇文章主要介紹了Django框架 querySet功能解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • python 實現(xiàn)方陣的對角線遍歷示例

    python 實現(xiàn)方陣的對角線遍歷示例

    今天小編就為大家分享一篇python 實現(xiàn)方陣的對角線遍歷示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • python中編寫config文件并及時更新的方法

    python中編寫config文件并及時更新的方法

    在pytorch或者其他深度學(xué)習(xí)框架中,有許多超參數(shù)需要調(diào)整,包括learning_rate,training_data_path等,因此編寫一個config文件統(tǒng)一存放這些參數(shù),方便調(diào)用/查看/修改還是很有必要,這篇文章主要介紹了python中一種編寫config文件并及時更新的方法,需要的朋友可以參考下
    2023-02-02
  • python的運算符與表達式你真的了解嗎

    python的運算符與表達式你真的了解嗎

    這篇文章主要為大家介紹了python的運算符與表達式,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • python通過re正則表達式切割中英文的操作

    python通過re正則表達式切割中英文的操作

    這篇文章主要介紹了python通過re正則表達式切割中英文的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python之pymysql的使用小結(jié)

    Python之pymysql的使用小結(jié)

    這篇文章主要介紹了Python之pymysql的使用小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07

最新評論

察雅县| 横峰县| 绥芬河市| 灵石县| 宜君县| 新安县| 怀远县| 波密县| 桦甸市| 台安县| 上虞市| 宜兰县| 阜平县| 太仓市| 武城县| 岐山县| 绵竹市| 冷水江市| 吉木萨尔县| 黎城县| 丽江市| 剑河县| 嘉义县| 和政县| 揭西县| 建水县| 疏附县| 革吉县| 泸溪县| 永兴县| 正蓝旗| 舟曲县| 商水县| 景东| 梅州市| 大余县| 凉城县| 石泉县| 南通市| 德钦县| 壶关县|