【python小工具】图片生成滚动效果的gif

在这里插入图片描述

# 相关库
import imageio
from PIL import Image

# 以下库用来识别图片主颜色
import pandas as pd
import numpy as np

def img2gif(image, offset=10, from_='r', scroll_size=0, has_out=False, bgc=''):
    """
    offset: 每次移动像素
    from: l, r, u, d  对应左右上下
    scroll_size: 滚动窗口大小
    has_out: 是否滚出窗口
    bgc: 填充颜色
    """
    # 反转坐标标记 [::1]正常  [::-1]反转
    rev_flag = 1 if from_ in 'lr' else -1    
    
    # 图片在移动方向和静止方向的尺寸
    move_axis, static_axis = image.size[::rev_flag]

    # 滚动窗口的尺寸(仅移动方向,静止方向与图片一样)
    scroll_size = scroll_size if scroll_size else move_axis  

    # 用图片的主色做背景色
    if not bgc:
        bgc = pd.Series([','.join(j[:3]) for i in np.array(image).astype('str') for j in i]).value_counts().index[0]
        bgc = '#{:0>2}{:0>2}{:0>2}'.format(*[hex(int(i))[2:] for i in bgc.split(',')])
    
    # 滚出窗口的补充
    scoll_out = scroll_size if has_out else 0
    
    # 左->右  上->下
    if from_ in 'lu':
        range_ = range(-move_axis, scoll_out, offset)
    # 右->左  下->上
    elif from_ in 'rd':        
        range_ = range(scroll_size, scroll_size - move_axis - scoll_out, -offset)
        
    image_ls = []
    for i in range_:
        new_img = Image.new(mode="RGBA", size=[scroll_size, static_axis][::rev_flag], color=bgc)
        new_img.paste(image, (i, 0)[::rev_flag])
        image_ls.append(new_img)
    return image_ls

# 读取图片
image = Image.open('1.png')


示例1:左往右,有滚出效果,不指定窗口大小

out = img2gif(image, offset=10, from_='l', has_out=True)
imageio.mimsave('out.gif', out , 'GIF', duration=0.05)

在这里插入图片描述


示例2:下往上,无滚出效果,指定窗口大小(大于图片)

out = img2gif(image, offset=10, from_='d', scroll_size=200, has_out=False)
imageio.mimsave('out.gif', out , 'GIF', duration=0.05)

在这里插入图片描述


示例3:右往左,有滚出效果,指定窗口大小(小于图片)

out = img2gif(image, offset=10, from_='r', scroll_size=100, has_out=True)
imageio.mimsave('out.gif', out , 'GIF', duration=0.05)

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值