对于IT男的表白方式,你可能存在什么误解

简介: 今天随手翻UC,看到一个关于程序猿520表白的段子。虽然是17年的老梗,但当时帖子比较火名为“她根本配不上我这么聪明的男人!” [段子链接]段子是一张长图,想想最近比较无聊,拿它做个Python的练习题呗。

IT男的思维


今天随手翻UC,看到一个关于程序猿520表白的段子。

虽然是17年的老梗,但当时帖子比较火名为“她根本配不上我这么聪明的男人!” [段子链接]

段子是一张长图,想想最近比较无聊,拿它做个Python的练习题呗。


图片的拆分与合并


Python的PIL模块在对图片处理上简直方便的不行...


先来说说图片的拆分吧

先来看看长图,内容是一共16张对白拼成的段子,其实我们只要把这16张图按照等高的方式进行裁剪就OK了,so easy!

代码主要用到了Image.crop(cropBox)的裁剪方式。


至于crop的拆分,点进去函数就能看到相关注释:


Returns a rectangular region from this image. The box is a

4-tuple defining the left, upper, right, and lower pixel

coordinate. See :ref:coordinate-system.


import os
from PIL import Image
def split_image(file, split_times):
    path, filename = os.path.split(file)
    os.chdir(path)
    try:
        os.mkdir('pictures')
    except FileExistsError:
        pass
    img = Image.open(filename)
    width, height = img.size
    per_height = height / split_times
    for pictureNumber in range(split_times):
        _cropBox = (0, per_height * pictureNumber, width * 0.8, per_height * (pictureNumber + 1))
        picture = img.crop(_cropBox)
        picture_name = os.path.join(path, 'pictures', "%d.png" % pictureNumber)
        picture.save(picture_name)
split_image("C:\\Users\Administrator\Downloads\\520.jpg", 16)

代码片段如上,简单的处理下边缘与长度即可。至于width的0.8,主要是因为图片中万恶的马赛克和“腾讯视频”的字样,影响我看段子的心情...


结果如下图:


网络异常,图片无法展示
|

图片分隔效果.png


再来看看图片合并

将16张剪切好的图片,组合成一个gif的动画,看起来会比单纯的图片看着高端多了,不是吗?


之前说到了PIL模块的强大,我们只需要使用Image的duration关键字,就能达到我们的目的。

上代码看看吧:


# -*- coding: utf-8 -*-
# @Author  : 王翔
# @JianShu : 一梦七年诗
# @Date    : 2019/5/18 22:53
# Software : PyCharm
# version: Python 3.6.8
# @File    : ChromePassword.py
import argparse
from PIL import Image
import os
class SplitLongPicture:
    def __init__(self):
        self.dirName = os.path.split(os.path.abspath(__file__))[0]
        self.ImagePath = args.ImagePath
        self.SplitTimes = args.SplitTimes
        self.SwitchingTime = args.SwitchingTime
        self.Path, self.File = os.path.split(self.ImagePath)
        self.Image = self.check_image_file()
        self.pictureList = []
    def check_image_file(self):
        _imageType = ['.jpg', '.png', '.bmp']
        if not os.path.isfile(self.ImagePath):
            raise IOError("请检查图片路径", self.ImagePath)
        elif os.path.splitext(self.File)[1].lower() not in _imageType:
            raise TypeError("请选择系统适配的图片类型", _imageType)
        else:
            return Image.open(self.ImagePath)
    def split_image(self):
        os.chdir(self.Path)
        try:
            os.makedirs('pictures')
        except FileExistsError:
            pass
        width, height = self.Image.size
        _unitHeight = height / self.SplitTimes
        for pictureNumber in range(self.SplitTimes):
            _cropBox = (0, _unitHeight * pictureNumber, width * 0.8, _unitHeight * (pictureNumber + 1))
            _unitPicture = self.Image.crop(_cropBox)
            _pictureName = os.path.join(self.Path, 'pictures', "%d.png" % pictureNumber)
            self.pictureList.append(_pictureName)
            _unitPicture.save(_pictureName)
    def composite_gif(self):
        images = []
        im = Image.open(self.pictureList[0])
        for file in self.pictureList[1:]:
            images.append(Image.open(file))
        gifName = os.path.join(self.Path, "result.gif")
        im.save(gifName, save_all=True, loop=True, append_images=images, duration=self.SwitchingTime * 1000)
if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('-p', '--ImagePath', help="所需分隔的图片途径")
    parser.add_argument('-t', '--SplitTimes', type=int, help="图片分隔次数")
    parser.add_argument('-s', '--SwitchingTime', type=float, help="GIF图片切换时常长(单位:秒),支持小数")
    args = parser.parse_args()
    if None in args.__dict__.values():
        parser.print_help()
    else:
        Main = SplitLongPicture()
        Main.split_image()
        Main.composite_gif()


代码顺便复习了一下argparse的相关知识。那么该怎么运行呢?

python D:\SplitLongPicture.py -p C:\Users\Administrator\Downloads\520.jpg -t 16 -s 1.25

网络异常,图片无法展示
|

result.gif


The End

段子链接下面还有一个修电脑的梗,如果大家想练习下,可以按照代码,自己做一个修电脑的动图。

希望大家喜欢我的小练习...




相关文章
|
6月前
HTML表格的跨行与跨列:《红楼梦》人物与小学课表示例
HTML表格的跨行与跨列:《红楼梦》人物与小学课表示例
|
数据挖掘 数据处理 Python
Python:我居然是渣男!万万没想到“渣男”语录排名第一的竟然是这一句!
Python:我居然是渣男!万万没想到“渣男”语录排名第一的竟然是这一句!
520礼物 静态HTML 来自理工男的浪漫 源码开放
520礼物 静态HTML 来自理工男的浪漫 源码开放
|
前端开发 Oracle JavaScript
第23个520情人节,女程序猿送男朋友什么?
第23个520情人节,女程序猿送男朋友什么?
266 0
第23个520情人节,女程序猿送男朋友什么?
|
小程序 程序员
520,来自IT男的浪漫
520,来自IT男的浪漫
438 0
520,来自IT男的浪漫
|
程序员
女神节,解密阿里女程序员们的代码诗!
云栖社区推出“三七”女生节特别分享,16位才华横溢的阿里女生们同一时间分享了代码诗,快来解密吧!
15174 0
|
云安全 安全 程序员
解密阿里云安全女程序员维棠 、牵尘代码诗!
2018年已过,我们迎来了新的一年,在机遇与挑战同在的环境下,我们更应勤于学习。为了方便大家学习,小编为大家盘点了2018年云安全 云栖号最火的干货文章分享给大家,让我们在新的一年里共同学习和成长!
5368 0
|
Java 程序员
一个女程序员的故事
        从哪里说起呢,我的程序员之路。有些话只是自己心里想的很明白,还从没说过。希望你有耐心看完,因为我的故事不精彩,也算不上奋斗史。我的文笔和叙事能力也很差。
1185 0
前端玩泥巴 - 体贴用户,拒做渣男
本文以淘宝人生成就页面为例,从前端开发人员的角度对页面交互、动画设计的探讨与思考,不涉及代码与实现。