Python教你打军体拳

网友投稿 584 2022-05-29

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

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

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

http://www.360doc.com这个网站大家都知道,和百度文库一个鸟样子,复制个文本,还得登录后才能复制,有没有一点奉献精神…文字都没得复制,更别说图片了。

那怎么办?软的不行来硬的,盘他呗!不就是几张图么,爬下来就完了啊…说到这里,顺嘴提一句,昨天爬抖音网页版,结果因为一些音乐的保存名称问题,反复下载了好几次,结果今天有些朋友想照着做一遍的时候,发现网站崩溃了,感觉有些罪过啊!

你还别说360doc这个网站还挺鸡贼的,刚开始下载图片,居然一直提示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():

"""

Python教你打军体拳

获取代码执行目录,并在目录下创建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()

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

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

OK,今天的内容就到这里,如果觉得内容对你有所帮助,欢迎点击文章右下角的“在看”。

期待你关注我的公众号清风Python,如果觉得不错,希望能动动手指转发给你身边的朋友们。

希望每周一至五清晨的7点10分,都能让清风Python的知识文章叫醒大家!谢谢……

-----------------

本文转自王翔|清风Python

python

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【云小课】基础服务第57课 OBS计费太复杂?看这一篇就够了
下一篇:kickstart auto install system
相关文章