前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3行代码实现gif裁切

3行代码实现gif裁切

作者头像
滚神大人
发布2019-09-17 17:18:37
8830
发布2019-09-17 17:18:37
举报
文章被收录于专栏:趣Python趣Python

最近在做动态二维码的时候碰到一个问题,从网上下载的动态gif不是正方形的,很难看,本来想找个软件来处理的,竟然没找到,只好自己动手。

先来看效果:

before

after

代码的确只有三行:

第一行:读取gif图片。

第二行:分解gif图片帧并进行裁切。

第三行:按照原gif的参数组装新的gif。

代码如下(需要用到PIL库):

def crop_gif_short(gif, gif_out, box):
    im = Image.open(gif)
    frames = [im.crop(box) for frame in range(0, im.n_frames) if not im.seek(frame)]
    frames[0].save(gif_out, save_all=True, append_images=frames, loop=0, duration=im.info['duration'])

可读性更高一点的版本:

def crop_gif(gif, box):
    """
    Crop gif picture.
    Args:
        gif: gif file name
        box: crop box (left, up, right, down)
    """
    _, file = os.path.split(gif)
    name, ext = os.path.splitext(file)

    im = Image.open(gif)
    frames = []
    for frame in range(0, im.n_frames):
        im.seek(frame)
        frames.append(im.crop(box))
    frames[0].save(name + '_crop' + ext,
                   save_all=True,
                   append_images=frames,
                   loop=0,
                   duration=im.info['duration'])

另外,生成动态二维码也只需要一行代码,如下(需要用到myqr库):

myqr.run( words = get_text(origin),
              version = 1,
              level = 'H',
              picture = picture,
              colorized = True,
              contrast = 2.0,
              brightness = 1.0,
              save_name = save_name,
              save_dir = path)

其中words是二维码内容,picture是背景图,save_name是保存名称,save_dir是保存路径。

二维码内容可以通过pyzbar库进行读取,代码如下(需要用到pyzbar库):

def get_text(f):
    return ''.join([_.data.decode('utf-8') for _ in pyzbar.decode(Image.open(f))])

生成的动态二维码效果如下:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 趣Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档