python实现GIF生成工具

由于在线Gif工具收费且有水印,博主决定自行编写一个Python脚本制作Gif。该脚本支持Python2和Python3,需要Pillow插件。用户可以通过命令行或拖拽图片到批处理文件上使用,能将单个图片或文件夹内的图片合成为Gif。核心功能是调用PIL.Image的save方法。
摘要由CSDN通过智能技术生成

今天在写文章的时候,需要合成一张Gif动图,结果之前一直使用的在线Gif工具居然要收费了,否则就得加水印,而且水印巨大无比,挡住主要内容了。于是就去github上找了一圈,结果没有找到理想的工具,基本上是使用文档不清晰,或者不支持自定义输入参数。不过也没白逛,扫了一眼代码,发现生成Gif的方法非常简单,所有就决定自己写了一个。

代码已上传到github: https://github.com/youlanhai/makegif

用法

python makegif.py 后面输入图片文件路径或文件夹,即可合成gif图片。本脚本支持python2和python3,需要先安装Pillow插件: pip install Pillow。Windows用户还可以直接把图片路径或文件夹,拖拽到makegif.bat上面即可。

用法1:输入多个图片,自动在图片父目录下生成一张input.gif

python makegif.py input/1.png input/2.png input/3.png

用法2: 输入图片文件夹,工具会收集input文件夹下的所有图片,然后合成gif,输出为input.gif

python makegif.py input

完整参数:

usage: makegif.py [-h] [-d DURATION] [-o OUTPUT] [-f FILTERS] [-s SIZE]
                  [-l LOOP]
                  inputs [inputs ...]

创建gif图片

positional arguments
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
实现一个Python聊天室中的GIF动图,你需要使用Python的Socket来建立客户端和服务器之间的连接。然后,你需要使用Python的Pillow来处理GIF动图,以便将其发送到其他客户端。 以下是一个简单的Python聊天室实现GIF动图的示例: ```python import socket import threading from PIL import Image, ImageSequence # 客户端类 class ChatClient: def __init__(self, host, port): self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.connect((host, port)) self.gif_data = b'' # 接收消息 def receive(self): while True: data = self.sock.recv(1024).decode() if data.startswith('GIF'): # 如果接收到的数据是GIF动图 self.gif_data += data.encode() # 将数据添加到GIF缓冲区中 if data.endswith('\r\n'): # 如果数据以\r\n结尾,说明GIF动图接收完毕 self.show_gif() # 显示GIF动图 self.gif_data = b'' # 清空GIF缓冲区 else: print(data) # 发送消息 def send(self, msg): self.sock.send(msg.encode()) # 显示GIF动图 def show_gif(self): img = Image.open(BytesIO(self.gif_data)) for frame in ImageSequence.Iterator(img): frame.show() # 服务器类 class ChatServer: def __init__(self, host, port): self.clients = [] self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.bind((host, port)) self.sock.listen(1) # 接收连接 def accept_clients(self): while True: client_sock, client_addr = self.sock.accept() client = ChatClient(client_sock) self.clients.append(client) client_thread = threading.Thread(target=self.handle_client, args=(client,)) client_thread.start() # 处理客户端 def handle_client(self, client): while True: data = client.sock.recv(1024).decode() if data: if data.startswith('/gif'): # 如果客户端发送的消息是GIF动图 self.send_gif(client, data) # 将GIF动图广播给其他客户端 else: self.broadcast(client, data) # 广播消息给其他客户端 # 广播消息 def broadcast(self, client, msg): for c in self.clients: if c != client: c.sock.send(msg.encode()) # 广播GIF动图 def send_gif(self, client, data): for c in self.clients: if c != client: c.sock.send(data.encode()) # 主函数 if __name__ == '__main__': server = ChatServer('localhost', 9999) server_thread = threading.Thread(target=server.accept_clients) server_thread.start() while True: name = input('Enter your name: ') if name: break client = ChatClient('localhost', 9999) receive_thread = threading.Thread(target=client.receive) receive_thread.start() while True: msg = input() if msg.startswith('/gif'): # 如果发送的消息是GIF动图 with open('animated.gif', 'rb') as f: gif_data = f.read() client.send(gif_data) # 发送GIF动图数据 else: client.send(f'{name}: {msg}') ``` 这个示例中,客户端和服务器之间使用Socket建立连接。当客户端收到GIF动图时,它会将数据添加到GIF缓冲区中,直到接收完毕。当接收完毕后,它会使用PillowGIF动图显示在屏幕上。当客户端发送GIF动图时,它会将GIF动图数据发送到服务器,并广播给其他客户端。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值