美文网首页虫虫清风Python
别人都在庆祝建军节我却忘记了,为了弥补我用Python教大家打军

别人都在庆祝建军节我却忘记了,为了弥补我用Python教大家打军

作者: 清风Python | 来源:发表于2019-08-02 01:01 被阅读25次
建军节?

懵逼树上懵逼果,懵逼树下你和我...中午吃饭时候,看到朋友圈大家开始发建军节的内容,才猛地想起来,今天八月一啊!感觉一天活的浑浑噩噩的,都记不清日子了。由于最近在看《大王饶命》,搞得脑回路都有点奇特,突然就想起初中同学的一件趣事。他妈妈当时预产期是8月1号,由于提前检查了性别,知道是个男孩子,家里又是革命老兵出身,所以全家人都提前给他起好名字了叫张建军,结果7月31号的夜里生了他,全家人免不了一场尴尬...第一次听到同学说这个趣事就觉得好冷,然后一记就是十几年。更有趣的是,这个同学最后还真的上了炮兵学院,成了一名军人,哈哈。用大王饶命里面的一句对白,形容他家人当时迎接新生命的心情:"小朋友你好,很高兴见到你"。 "不,你高兴的太早了" !

怎么补偿这节日

老张今天在朋友圈显摆自己当年参军时候的照片,得瑟的不行。看娃当年也是安分守己的好青年,现在留个大背头,看着就不像好人。想问他军校学的东西,现在还记得么,比如军体拳?想想今天不知道该写点什么,不如我们就来做一套军体拳动画,大家觉得如何!

网上搜到

找了半天,找到一个插图比较齐全的军体拳动作分解。一共有50多张图的分解动作,还起来还不错。

军体拳图解
http://www.360doc.com这个网站大家都知道,和百度文库一个鸟样子,复制个文本,还得登录后才能复制,有没有一点奉献精神...文字都没得复制,更别说图片了。
360doc.com
那怎么办?软的不行来硬的,盘他呗!不就是几张图么,爬下来就完了啊...说到这里,顺嘴提一句,昨天爬抖音网页版,结果因为一些音乐的保存名称问题,反复下载了好几次,结果今天有些朋友想照着做一遍的时候,发现网站崩溃了,感觉有些罪过啊!
你还别说这个网站还挺鸡贼的,刚开始下载图片,居然一直提示403 Forbidden
图片下载失败
看了下是免登录的网站啊,没有cookie啥的为啥会提示403 Forbidden呢,卡了半天发现必须要在headers中添加==Referer==才可以。网页分析和昨天爬抖音的链接没有太大区别在这里就不细讲了...最终下载56张军体拳分解动作图片:
图片下载完成
动图合成

图片下载下来了,光这么看有啥意思啊,要让这兄弟操练起来才对啊!那么我们该如何让这些图片动起来呢?其实很简单,使用from PIL import Image即可!但要注意一点,大家可以看到,13 14等几张图明显很窄,这样直接去合成的图片,根本没法看,所以在合成的同时,统一调整图片尺寸,代码如下:

def composite_gif(self):
    _images = []
    # 创建初始图片
    base_im = Image.open(images_list[0])
    # 获取图片尺寸
    _picture_size = base_im.size
    for file in images_list[1:]:
        im = Image.open(file)
        if im.size != _picture_size:
            # 调整尺寸
            im = im.resize(_picture_size)
        _images.append(im)
    gif = os.path.join(path, "juntiquan.gif")
    base_im.save(gif, save_all=True, loop=True, append_images=_images, duration=300)

简单说明下,我们先将第一张图片作为基础图例,并获取他的图片尺寸,之后所有的图片按照这个尺寸进行调整大小,把这些二进制的图片数据存储在一个list,当最后保存图片时,选择save_all = True, loop=True, append_images=_images几个参数,将图片全部保存,duration是图片间隔时长,单位是毫秒哦!

最终代码
# -*- coding: utf-8 -*-
# @Author   : 王翔
# @JianShu  : 清风Python
# @Date     : 2019/8/1 23:53
# @Software : PyCharm
# @version  :Python 3.7.3
# @File     : JunTiQuan.py

import os
import requests
from bs4 import BeautifulSoup
from PIL import Image


class JunTiQuan:
    def __init__(self):
        self.headers = {
            "Referer": url,
            'Connection': 'keep-alive',
            'user-agent': ('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 '
                           '(KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36')
        }
        self.path = self.image_path()
        self.images_list = list()

    @staticmethod
    def image_path():
        """
        获取代码执行目录,并在目录下创建Music文件夹
        :return 图片下载文件夹
        """
        base_dir = os.path.dirname(os.path.abspath(__file__))
        _path = os.path.join(base_dir, "Images")
        if not os.path.exists(_path):
            os.mkdir(_path)
        return _path

    def get_request(self, url):
        """
        封装requests.get方法
        如果为网页请求,返回网页内容
        否则,解析图片地址,并返回图片二进制内容
        :param url: 请求url(分网页、图片两类)
        :return: 网页内容 & 图片二进制文件
        """
        r = requests.get(url, headers=self.headers, timeout=5)
        if url.endswith('html'):
            return r.text
        else:
            return r.content

    def download_images(self, html):
        """
        解析军体拳图片
        :param html: 网页内容
        """
        soup = BeautifulSoup(html, 'lxml')
        # 根据关键字onclick查找每个下载地址
        for num, img in enumerate(soup.findAll('img', attrs={'fcksavedurl': True}), start=1):
            img_bytes = self.get_request(img['src'])
            image_name = '{}.png'.format(num)
            _full_name = os.path.join(self.path, image_name)
            self.images_list.append(_full_name)
            with open(_full_name, 'wb') as f:
                f.write(img_bytes)
            print("已下载 {}".format(image_name))

    def composite_gif(self):
        _images = []
        # 创建初始图片
        base_im = Image.open(self.images_list[0])
        # 获取图片尺寸
        _picture_size = base_im.size
        for file in self.images_list[1:]:
            im = Image.open(file)
            if im.size != _picture_size:
                # 调整尺寸
                im = im.resize(_picture_size)
            _images.append(im)
        gif = os.path.join(self.path, "juntiquan.gif")
        base_im.save(gif, save_all=True, loop=True, append_images=_images, duration=300)

    def run(self):
        html = self.get_request(url)
        self.download_images(html)
        self.composite_gif()


if __name__ == '__main__':
    url = 'http://www.360doc.com/content/16/0601/13/33121396_564170382.shtml'
    main = JunTiQuan()
    main.run()
动图效果

来一起看看最终生成的动图效果吧:


军体拳.gif

小伙子打得不错啊,明天我是不是要@一下老张,让他给我们录个军体拳的视频,看看是不是真材实料,哈哈。

The End

OK,今天的内容就到这里,如果觉得内容对你有所帮助,欢迎点击文章右下角的“在看”。
期待你关注我的公众号清风Python,如果觉得不错,希望能动动手指转发给你身边的朋友们。
希望每周一至五清晨的7点10分,都能让清风Python的知识文章叫醒大家!谢谢……

相关文章

  • 别人都在庆祝建军节我却忘记了,为了弥补我用Python教大家打军

    建军节? 懵逼树上懵逼果,懵逼树下你和我...中午吃饭时候,看到朋友圈大家开始发建军节的内容,才猛地想起来,今天八...

  • 建军节主题PPT

    22套-八一建军节主题PPT、军魂颂、庆祝建军节、庆祝中国解放军建军92周年、庆祝中国解放军建军93周年、庆祝中国...

  • 军礼致敬

    13#268【节庆】建军节 《 我用军礼致敬 》 —— 庆祝八一建军节 幼小的心灵早就植入 ...

  • 跑友们庆祝“八一建军93周年”

    八一建军节到了,南漳跑协的跑友们用跑步的形式庆祝建军节。用线上及线下的方式开展庆祝活动,一路奔跑,一路高歌,激情高...

  • 忘记……

    我忘记了爱你,忘记了恨你,忘记了陌生,什么都忘了,醒来以后却发现我忘记了该怎么忘……

  • 《庆祝建军节》

    为庆祝“八一”建军节而作: 《庆祝建军节》 南昌起义枪声响, 至今...

  • 《我本尘埃》

    以前的我很善良,诸事都为别人着想,完全忘记了自己在做什么?我好像完全生活在一个跟常人不同的空间里。大家都在为了生计...

  • 庆祝建军节 慰问志愿军

    西北区: 王芫 报道 中国军人,国家的脊梁,人民幸福生活的保障。抗美援朝之战,是新中国开国之战,也是立国之战。...

  • 永远的纪念八一建军节丨永远的致敬所有可爱的军人

    文图/李根勇 永远的纪念八一建军节|热烈庆祝中国人民解放军成立92周年! 据载:八一建军节是中国人民解放军建军纪念...

  • 听了这些歌就把自己变好吧

    我们是不是不知不觉在意别人的感受,在别人的眼里活太久了,却忘记了自己。我找工作是为了这个家;我学习是为了老师;我结...

网友评论

    本文标题:别人都在庆祝建军节我却忘记了,为了弥补我用Python教大家打军

    本文链接:https://www.haomeiwen.com/subject/reahdctx.html