基于Python制作GIF表情包生成工具
在當(dāng)前無(wú)表情包不會(huì)聊天的時(shí)代,怎么也不能輸在表情包數(shù)量不足上啊,今天咱們就來(lái)制作一個(gè) gif 生成工具,用來(lái)制作表情包也太好用啦
先來(lái)看看整體效果
頁(yè)面設(shè)計(jì)
本文工具的頁(yè)面,是通過(guò) Qt Designer 來(lái)設(shè)計(jì)的,我們可以直接在安裝了 PyQt5-tools 的目錄下找到 designer.exe 這個(gè) EXE 執(zhí)行文件,直接執(zhí)行,比如我這里就是如下目錄
C:\Python3\Lib\site-packages\qt5_applications\Qt\bin\designer.exe
當(dāng)然也可以直接配置到 PyCharm 里,比如這樣
這里的配置就一筆帶過(guò)了,如果有配置不成功的朋友可以私下了解或者直接百度也行
我們打開(kāi) Qt Designer 工具之后,可以看到如下頁(yè)面
此時(shí)我們只需要妥妥拽拽就可以完成頁(yè)面的布局工作
下面簡(jiǎn)單說(shuō)一下上面布局所使用的組件
- 帶有文字“選擇圖片”和“生成gif”的組件是兩個(gè) QPushButton
- “選擇圖片”按鈕下方的是一個(gè) QListVIew 組件
- 再往下的三段文字是 QLabel 組件,后面分別對(duì)應(yīng)的 QLineEdit 組件
- “生成gif”按鈕下方的也是兩個(gè) QLabel 組件,分別用來(lái)預(yù)覽圖片和作者聲明
這樣我們完成布局之后,保存當(dāng)前配置,例如保存為“gif.ui”
接下來(lái)我們使用 PySide2 來(lái)實(shí)現(xiàn)頁(yè)面邏輯,所以需要先安裝這個(gè)庫(kù)
pip install PySide2
安裝完成之后,我們直接在 cmd 命令行輸入如下命令,就可以把剛剛生成的 ui 文件轉(zhuǎn)化為 py 代碼
pyside2-uic -o gif.py gif.ui
這樣一個(gè)頁(yè)面布局就完成了,而且轉(zhuǎn)化而來(lái)的頁(yè)面布局 py 文件基本不用修改,直接引用即可
核心邏輯
下面我們編寫(xiě)核心邏輯,在生成的 py 文件同目錄下創(chuàng)建一個(gè) main.py 文件,然后引用剛剛生成的 py 文件內(nèi)容
from?gif?import?Ui_Form from?PySide2.QtWidgets?import?QMainWindow,?QApplication,?QFileDialog class?CreateGif(QMainWindow,?Ui_Form): ????def?__init__(self): ????????super().__init__() ????????self.setupUi(self) ????????self.setup() ????????self.show()
下面我們?cè)O(shè)置 setup 函數(shù),給對(duì)應(yīng)的組件設(shè)置初始值
????def?setup(self): ????????self.imgs?=?None ????????self.gifImgName?=?None ????????self.lineEdit.setText("0") ????????self.lineEdit_2.setText("0") ????????self.lineEdit_3.setText("500")
再接下來(lái)編寫(xiě)選擇圖片的函數(shù)
????def?choose_img(self): ????????self.imgs?=?QFileDialog.getOpenFileNames( ????????????caption="選擇圖片",?filter="")[0]??#?(*.png,?*.jpg,?*.PNG) ????????if?self.imgs: ????????????imgwidth,?imgheight?=?Image.open(self.imgs[0]).size ????????????self.lineEdit.setText(str(imgwidth)) ????????????self.lineEdit_2.setText(str(imgheight)) ????????????new_imgs?=?[] ????????????for?img?in?self.imgs: ????????????????img_name?=?os.path.basename(img) ????????????????new_imgs.append(img_name) ????????????strings?=?QStringListModel(new_imgs) ????????????self.listView.setModel(strings)
首先通過(guò) QFileDialog 提供的方法來(lái)獲取圖片文件,然后使用 PIL 庫(kù)讀取圖片的大小,并更新兩個(gè) lineEdit 組件值,最后把所有選到的圖片都展示在 listView 組件當(dāng)中
下面是生成 gif 的函數(shù)
????def?gen_gif(self): ????????frames?=?[] ????????imgwidth?=?int(self.lineEdit.text()) ????????imgheight?=?int(self.lineEdit_2.text()) ????????imgspeed?=?int(self.lineEdit_3.text()) ????????for?img?in?self.imgs: ????????????img?=?Image.open(img).resize((imgwidth,?imgheight)).convert("RGBA") ????????????frames.append(img) ????????self.gifImgName?=?os.path.splitext(os.path.basename(self.imgs[0]))[0] ????????frames[0].save(f"{self.gifImgName}.gif",?append_images=frames[1:],?loop=0,?save_all=True,?duration=imgspeed) ????????self.displayGif()
也不復(fù)雜,以選擇圖片的第一張名字命名要生成的 gif 圖片,然后通過(guò) save 方法把其余圖片保存至第一張圖片當(dāng)中,類(lèi)型選擇 gif 即可
最后就是展示生成 gif 的代碼
????def?displayGif(self): ????????self.movie?=?QMovie() ????????self.movie.setFileName(f"{self.gifImgName}.gif") ????????self.label.setMovie(self.movie) ????????self.movie.start()
使用 PySide2.QtGui 中的 QMovie 方法,在 label 當(dāng)中展示 gif 圖片
到此這篇關(guān)于基于Python制作GIF表情包生成工具的文章就介紹到這了,更多相關(guān)Python GIF表情包生成內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python split() 函數(shù)拆分字符串將字符串轉(zhuǎn)化為列的方法
今天小編就為大家分享一篇Python split() 函數(shù)拆分字符串將字符串轉(zhuǎn)化為列的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07Python判斷一個(gè)文件夾內(nèi)哪些文件是圖片的實(shí)例
今天小編就為大家分享一篇Python判斷一個(gè)文件夾內(nèi)哪些文件是圖片的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12使用Python進(jìn)行穩(wěn)定可靠的文件操作詳解
在本文中,主要分享一些如何在Python代碼中改善I/O可靠性的見(jiàn)解,大家參考使用吧2013-12-12Python sorted排序方法如何實(shí)現(xiàn)
這篇文章主要介紹了Python sorted排序方法如何實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Python基于whois模塊簡(jiǎn)單識(shí)別網(wǎng)站域名及所有者的方法
這篇文章主要介紹了Python基于whois模塊簡(jiǎn)單識(shí)別網(wǎng)站域名及所有者的方法,簡(jiǎn)單分析了Python whois模塊的安裝及使用相關(guān)操作技巧,需要的朋友可以參考下2018-04-04python命令行執(zhí)行腳本找不到模塊ModuleNotFoundError問(wèn)題
這篇文章主要介紹了python命令行執(zhí)行腳本找不到模塊ModuleNotFoundError問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06python調(diào)用百度語(yǔ)音識(shí)別實(shí)現(xiàn)大音頻文件語(yǔ)音識(shí)別功能
這篇文章主要為大家詳細(xì)介紹了python調(diào)用百度語(yǔ)音識(shí)別實(shí)現(xiàn)大音頻文件語(yǔ)音識(shí)別功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08python實(shí)現(xiàn)實(shí)時(shí)監(jiān)控文件的方法
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)實(shí)時(shí)監(jiān)控文件的3種方法,感興趣的小伙伴們可以參考一下2016-08-08