Python基于imageio库制作gif动图

1 篇文章 0 订阅
1 篇文章 0 订阅

python安装第三方库imageio

imageio 2.15.0
numpy 1.19.5
(1)命令行安装:

pip install numpy== 1.19.5
pip install imageio== 2.15.0

(2)pycharm安装
File->Setting打开设置对话框,选择Project:python下Project interpreter
在这里插入图片描述
在这里插入图片描述

注意:imageio依赖于numpy,安装版本高于2.15.0也要升级numpy

素材准备及Python代码编写

将代码复制到myqr.py中,在当前目录下新建img文件夹,用于存放图片素材,生成的gif文件为new.gif,具体目录结构如下:
在这里插入图片描述

import imageio
import  os
def create_gif(image_list, gif_name, duration = 1.0):
    '''
    参数
    :1. image_list: 这个列表用于存放生成动图的图片
    :2. gif_name: 字符串,所生成gif文件名,带.gif后缀
    :3. duration: 图像间隔时间
    '''
    frames = []
    for image_name in image_list:
        frames.append(imageio.imread(image_name))

    imageio.mimsave(gif_name, frames, 'GIF', duration=duration)
    return
# 搜索图片文件路径
def prepareImgList(img_path):
    img_list = os.listdir(img_path)
    gif_images = []
    for img_name in img_list:
        file_name = os.path.join(img_path,img_name)
        gif_images.append(file_name)
    return gif_images
def main():
    #这里放上自己所需要合成的图片
    path = os.getcwd()
    img_path = os.path.join(path,'img')
    image_list=prepareImgList(img_path)   #搜索路径
    # image_list = ['1.jpg', '2.jpg', '3.jpg','4.jpg']#指定图片
    gif_name = 'new.gif'
    #在这里修改图像间隔的时间
    duration = 0.5
    create_gif(image_list, gif_name, duration)

if __name__ == '__main__':
    main()

运行生成动态二维码预览:
在这里插入图片描述

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要实现一个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动图数据发送到服务器,并广播给其他客户端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

废人一枚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值