<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python制作gif表情包生成工具,斗圖再也不會(huì)輸啦

          共 3911字,需瀏覽 8分鐘

           ·

          2023-07-06 03:20

          Python客棧 設(shè)為“ 星標(biāo) ?
                
                  第一時(shí)間收到最新資訊
                  

          2c9076e02b4285a959f5988e2707e6f8.webp


          在當(dāng)前無表情包不會(huì)聊天的時(shí)代,怎么也不能輸在表情包數(shù)量不足上啊,今天咱們就來制作一個(gè) gif 生成工具,用來制作表情包也太好用啦

          先來看看整體效果

          765013e1f77e783d0e342a50e1fd39c9.webp

          頁面設(shè)計(jì)

          本文工具的頁面,是通過 Qt Designer 來設(shè)計(jì)的,我們可以直接在安裝了 PyQt5-tools 的目錄下找到 designer.exe 這個(gè) EXE 執(zhí)行文件,直接執(zhí)行,比如我這里就是如下目錄

          C:\Python3\Lib\site-packages\qt5_applications\Qt\bin\designer.exe

          當(dāng)然也可以直接配置到 PyCharm 里,比如這樣

          58ff4f56cd07eebf29c9a0b1f83a9030.webp

          這里的配置就一筆帶過了,如果有配置不成功的朋友可以私下了解或者直接百度也行

          我們打開 Qt Designer 工具之后,可以看到如下頁面

          77e61d51b417f3c9a855d80588af30f7.webp

          此時(shí)我們只需要妥妥拽拽就可以完成頁面的布局工作

          8ef0c33e88a0becfb9384ee165d07bec.webp

          下面簡(jiǎn)單說一下上面布局所使用的組件

          • 帶有文字“選擇圖片”和“生成gif”的組件是兩個(gè) QPushButton
          • “選擇圖片”按鈕下方的是一個(gè) QListVIew 組件
          • 再往下的三段文字是 QLabel 組件,后面分別對(duì)應(yīng)的 QLineEdit 組件
          • “生成gif”按鈕下方的也是兩個(gè) QLabel 組件,分別用來預(yù)覽圖片和作者聲明

          這樣我們完成布局之后,保存當(dāng)前配置,例如保存為“gif.ui”

          接下來我們使用 PySide2 來實(shí)現(xiàn)頁面邏輯,所以需要先安裝這個(gè)庫

                
                pip install PySide2

          安裝完成之后,我們直接在 cmd 命令行輸入如下命令,就可以把剛剛生成的 ui 文件轉(zhuǎn)化為 py 代碼

                
                pyside2-uic -o gif.py gif.ui

          這樣一個(gè)頁面布局就完成了,而且轉(zhuǎn)化而來的頁面布局 py 文件基本不用修改,直接引用即可

          核心邏輯

          下面我們編寫核心邏輯,在生成的 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")

          再接下來編寫選擇圖片的函數(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)

          首先通過 QFileDialog 提供的方法來獲取圖片文件,然后使用 PIL 庫讀取圖片的大小,并更新兩個(gè) lineEdit 組件值,最后把所有選到的圖片都展示在 listView 組件當(dāng)中

          b704535af73521af051908cd81322e86.webp

          下面是生成 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 圖片,然后通過 save 方法把其余圖片保存至第一張圖片當(dāng)中,類型選擇 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 圖片

          這樣,這個(gè)小小的 gif 制作工具就完成了,還不快一起動(dòng)手做起來!

          如果覺得還不錯(cuò),就點(diǎn)個(gè)吧~


          32a94f2a7a1914783ad8222922d75db4.webp往期推薦 32a94f2a7a1914783ad8222922d75db4.webp

          1、用Python寫了一個(gè)「擁抱梅西」的小游戲

          2、使用Python開發(fā)一個(gè)恐龍跑跑小游戲,玩起來

          3、快扛不住了,小紅書問的賊細(xì)!

          4、幾個(gè)被淘汰的Python庫,請(qǐng)不要再用!

          5、這幾個(gè)良心寶藏工具,免費(fèi)好用!太給力了!


          點(diǎn)擊關(guān)注公眾號(hào),閱讀更多精彩內(nèi)容

          6bd701dacef84fc50dd2fb537fd6c346.webp

          瀏覽 86
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  自拍偷拍激情视频 | 久草久| 天天操天天干天天透 | 午夜精品理论 | 成人无码区免费A片在线软件 |