本文转载自微信公众号《胡萝卜拌饭》,作者周萝卜。转载本文请联系萝卜大杂烩公众号.在现在这个没有表情包不能聊天的时代,没有表情包怎么能不输呢?今天我们就来做一个gif生成工具,对于制作表情包也是??非常有用的。来看看整体效果页面本文设计工具的页面是QtDesigner设计的。我们可以直接在安装PyQt5-tools的目录下找到EXE可执行文件designer.exe,直接执行即可。比如这里是如下目录C:\Python3\Lib\site-packages\qt5_applications\Qt\bin\designer.exe当然也可以直接在PyCharm中配置。比如这里的配置可以一笔带过。有配置失败的朋友可以私信或直接百度了解。我们打开Qt的Designer工具,使用后可以看到如下页面。这时候我们只需要适当的拖拽就可以完成页面的布局。下面简单说一下上面布局中用到的组件。带有“选择图片”和“生成gif”文字的组件在两个QPushButton“选择图片”按钮下面是一个QListVIew组件,接下来的三段文字是QLabel组件,“生成gif”下方对应的QLineEdit组件"button也是两个QLabel组件,用来预览图片和作者声明我们完成布局后,保存当前配置,比如保存为"gif.ui"。接下来我们使用PySide2来实现页面逻辑,所以需要先安装这个库。pipinstallPySide2安装完成后,我们直接在cmd命令行输入如下命令,就可以将新生成的ui文件转换成py代码pyside2-uic-ogif.pygif.ui这样一个页面布局就完成了,转换后的页面布局py文件基本不需要修改,直接引用即可。核心逻辑如下我们编写核心逻辑,在生成的py文件同级目录下创建一个main.py文件,然后从gifimportUi_FormfromPySide2.QtWidgetsimportQMainWindow,QApplication,QFileDialogclassCreateGif(QMainWindow,Ui_Form):def__init__(self):super().__init__()self.setupUi(self)self.setup()self.show()接下来我们设置setup函数,为对应的组件defsetup设置初始值(self):self.imgs=Noneself.gifImgName=Noneself.lineEdit.setText("0")self.lineEdit_2.setText("0")self.lineEdit_3.setText("500")然后写函数defchoose_img(self):self.imgs=QFileDialog.getOpenFileNames(caption="选择图像",filter="")[0]#(*.png,*.jpg,*.PNG)ifself.imgs:imgwidth,imgheight=Image.open(self.imgs[0]).sizeself.lineEdit.setText(str(imgwidth))self.lineEdit_2.setText(str(imgheight))new_imgs=[]forimginself.imgs:img_name=os.path.basename(img)new_imgs。append(img_name)strings=QStringListModel(new_imgs)self.listView.setModel(strings)首先通过QFileDialog提供的方法获取图片文件,然后使用PIL库读取图片大小,更新两个lineEdit组件值,最后把所有选中的图片都显示在listView组件中新台币下面是生成gif的函数defgen_gif(self):frames=[]imgwidth=int(self.lineEdit.text())imgheight=int(self.lineEdit_2.text())imgspeed=int(self.lineEdit_3.text())forimginself.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()并不复杂。用所选图片的名字命名要生成的gif图片,然后通过save方法将其余图片保存到第一张图片中。类型选择gif,最后显示生成gif的代码defdisplayGif(self):self.movi??e=QMovie()self.movi??e.setFileName(f"{self.gifImgName}.gif")self.label.setMovie(self.movi??e)self.movi??e.start()使用PySide2.QtGui方法在QMovie方法中,在标签中显示gif图片,这个gif制作小工具就完成了,快来一起动手吧!
