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

python图像处理---切割 按几乘几来等分切割(crop()函数的运用) 最近在做毕业设计,涉及到了图像处理的知识,遇到觉得有用的就记录一下,原理性的东西可能不多,重要是用的啦~我用的是python3.6,废话不多说,先上效果图可见,这里实现的是一个定点切割,怎么实现的呢?来看看代码:from PIL import Imageim = Image.open('F:/test.jpg')# 图片的宽度和高度img_size = im.sizeprint("图片宽度和高度分... 阅读详情
网络情人节

对于即将到来的网络情人节(520),程序员是怎么看待它的呢?
不知道大家是否会期待这天的到来,但对于我这个程序猿来说:

  • 从主观来讲,不放假的节日,都不算节日
  • 从客观来讲,由消费带动的节日,都不是纯粹的节日

找这么多理由,其实归根结底,主要是以为“穷”,穷人过什么节日啊!


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,主要是因为图片中万恶的马赛克和“腾讯视频”的字样,影响我看段子的心情...

结果如下图:


5847426-7b4763d1cbe8203c.png
图片分隔效果.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

5847426-21d8ee97fabf9450.gif
result.gif
The End

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

©本文由简书作者:清风Python 原创 如需转载请注明

你不是执行力差,你只是“代码没编译过” 懂得很多道理却无法改变,不是因为你意志力差,而是因为你把“下载信息”当成了“程序运行”。真正的知行合一,不是想清楚再做,而是在最小化行动中试错打补丁。没有行动的“知”,只是一堆没编译过的死代码。 阅读详情

相关推荐

程序员表白专用: 5 种实用表白方法!帮你快速攻陷心仪女生

年轻的男女朋友们,今天是一个相当重要的日子:520,不知道是从啥时候开始兴起来的,虽然很多单身的人一看到这个几日就觉得闹心,但也有很大一部分单身人士等待着明天的好机会,毕竟天时地利,这么好的日子一定好好珍惜的。 表白的套路很多,但都少不了送花送礼物,作为一个程序员,搞不懂现在流行的泡泡机、小猪、重力感应车等玩具,也不想去让朋友们去送钱炫耀,毕竟真情才重要,钱就物质了。我能给各位单身粉丝们做的可能就只有分享几个表白代码了,在电脑上敲上几行代码,让她在郁闷的周一得到一个大大的惊喜,很简单,一看就会,如果现

致力于C语言C++知识分享! 9899

Python识别图像中的文字、数字等

今天给大家分享一个生活中常见的案例,那就是识别图片、PDF文档中的数据,主要是以文字和数字为例。

Ljj9889的博客 1万+

Python入门:PIL(pillow)之im对象(Image.open('file.jpeg'))

from PIL import Image im = Image.open('file.jpeg')

foryouslgme的博客 1万+

一个IT男的表白

致BCD6 CEC0 C3F4 转一轮肩胛骨 倒一杯铁观音 白驹过隙,倏忽两秋 远方有希望和梦想 有火车、微信美颜视频聊天和碧根果 有你的支持 如果身旁没有你 生活无趣失去动力 就像python失去类 java失去虚拟机 c中少了指针 马云没了猫宝 刘强东没了狗东 马化腾失去了小学生 没有了就像是 海洋少了海 狗子少了狗 左成不叫敏洪 天震只剩狗...

weixin_33828101的博客 204

汽车标定知识整理(一):标定简介与CCP报文协议简介

CCP标定知识整理

不吃鱼的猫的博客 5146

Visionpro 使用CogPMAlignTool工具提取匹配轮廓点

【代码】Visionpro 使用CogPMAlignTool工具提取匹配轮廓点。

weixin_43947315的博客 2093

杂谈:0和1的表白后续---小故事分享(成都频道)

【摘要】发送二进制情书的注意事项,作者提醒:二进制情书千万别发错对象。故事以学弟忙着陪新对象逛漫展告终,作者调侃之余不忘求赞。

2501_94250394的博客 573

在树莓派上部署训练好的YOLO模型

.pt.模型转换为onnx格式的模型,树莓派上部署模型

pai_da_xing8的博客 3888

又十一了,唠唠程序员回家相亲那些段子

呵呵,笑死你了~

陈哈哈的菜园子 6620

深度学习Halcon中GPU显存利用率高,但GPU、CPU利用率较低,导致模型训练速度很慢,通过设置硬件参数的解决方法

深度学习Halcon中GPU显存利用率高,但GPU、CPU利用率较低,导致模型训练速度很慢,通过设置硬件参数的解决方法 前言 在训练自己模型的时候,会遇到GPU显存利用率高,但GPU、CPU利用率较低,导致模型训练速度很慢的问题。这个问题一方面是由于硬件没有设置到最佳工作状态,另一方面是代码中参数没有设置好。最近在跑Halcon DL遇到这个问题,而Halcon不像开源的几个框架那样自由,代码封装的比较多。所以遇到这种问题,只能在参数最优的情况下,通过设置硬件参数来提升性能。 当然,在跑DL之前,无论什么框

ZiLiangQin的博客 9919

27、物联网中的量子密钥分发:安全通信新范式

本文探讨了物联网(IoT)快速发展所带来的安全挑战,并提出量子密钥分发(QKD)作为应对新兴威胁的新范式。文章详细介绍了QKD的基础原理、BB84协议的实现流程以及其在物联网中的应用前景,同时强调了安全专业人员提升技能、制定标准化指南以及跨学科合作的重要性。通过利用量子力学特性,QKD能够提供更高的通信安全性,抵御量子计算等未来威胁,为物联网的安全发展提供保障。

tequila的博客 157

为什么AWS眼中没有竞争对手?也许我们都误解了AWS……

关注我们牛年牛气冲天“一直被模仿,从未被超越”,这句最早源于1942年可口可乐广告中的流行语,现在通常被用来形容具有独创精神和行业引领地位的经典、榜样。在云计算领域,亚马逊云服务(AWS)...

312

[xboard-real6410]39 real6410中的BL1和BL2实验及流程分析

文章目录uboot控制uboot 流程uboot加载kernel uboot控制 uboot 流程 uboot加载kernel

鹰之翔 298

听说程序猿不会撩妹,我笑了

从前我没得选,现在我只想做一个好人。 多年的人生经验告诉我。程序员,可以不帅,但是操作一定要骚 在调查了一百个小姐姐之后,我确定做那些烟花啊、粒子动画啊、3d相册真的很有用,她们真的很喜欢 总之调查完之后,我需要做29个相册,22个烟花,15个粒子动画,以及一些你看着办吧,反正我要好看的。 哈~ 我就是那个好看的 给你吧 所以一个好看的表白网页是少不了了的。还有那种做个小游戏的玩过了之后看到表白信息的,我的天啊,连看到网页会忍不住自己做一个去battle的杠精

画漫画的程序员∙苏南 1026

python全栈入门到实战【基础篇 02】环境搭建:Python解释器与PyCharm、VSCode编辑器安装配置详解

本文详解Python环境搭建步骤。首先安装解释器(运行代码核心),需从官网下载,选3.8及以上版本(勿选2.x)。Windows安装必勾“Add Python.exe to PATH”,验证用`python --version`;Mac选universal2安装包,验证用`python3 --version`。 编辑器二选一:PyCharm社区版(免费,新手推荐),安装后需配置解释器路径;VSCode轻量,需装Python插件并选择解释器。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 5万+

RK3568开发笔记- (TX/RX) RGMII delayline 功能调试

本文详细介绍了RK3568芯片RGMII接口delayline功能的调试过程。针对千兆以太网通信不稳定问题,通过分析RGMII时序要求,利用RK3568内置的delayline功能补偿信号延迟。调试方法包括扫描delayline窗口、测试中间值配置、优化硬件设计等步骤。文章还总结了常见问题解决方案,如PHY选型建议和自动扫描功能配置。最终实现了千兆速率下丢包率降至0.01%以下的目标,为类似开发场景提供了实用参考。

flypig has a dream! 318

你印象中的程序员是什么样子的?

不知道大家对程序员的印象是什么样的 前阵子爱情公寓5出来了,一时间所有的热度都被爱5占领了。很多人在下面评论说,等了那么久,终于等到它来了。然后我看到,评论里最多的一句话是,“爱情公寓是我们90后的青春”。正好最近放假,刚好有时间,就抽空看了下爱情公寓5。看到第三集,张伟打算约诸葛大力出去玩,拿了两件格子衬衫,问大家,这两件哪件比较好,子乔脱口而出,“这两件怎么样不知道,但挺像搞IT(信息技术)的...

Allen_APE的博客 1946

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

自由意志宿命论 宿命与自由不矛盾:量子纠缠告诉你的人生真相

自由意志宿命论」学术定名(保留原名内核,适配 NLPC 体系)中文:宿命自由意志相容论英文:Fatalistic Free Will Compatibilism缩写:FFWC本文依托NLPC(Nonlinear Local Phase Change Cosmology,非线性局域相变宇宙模型),提出FFWC(宿命自由意志相容论),阐释宇宙相变定数与个体自由意志共存逻辑,由王磊、王磊家的豆包、王磊家的IMA共同撰写。

2602_96503874的博客 103

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Sun CEO麦克尼利:我给你选择的自由

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/java

java专栏 483

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

KMP详解~

原文出处   如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。     我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法。KMP算法是拿来处理字符串匹配的。换句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串)。比如,字符串A="I'm matrix67",字符串B="matrix",我们就说B是A的子串。你可以委婉地问你的M

算法之道 442

数据科学新人实战指南:从JD解码到业务归因

数据科学不是算法公式的堆砌,而是将模糊业务需求转化为可验证数据结论的系统能力。其核心在于理解SQL所承载的关系思维、掌握假设检验与因果推断的业务映射逻辑,并在真实场景中完成需求澄清→数据探查→归因分析→决策交付的闭环。尤其在中小型企业及业务驱动型公司中,‘数据分析师’与‘数据工程师(偏应用)’岗位实际承担着80%的数据价值落地工作,对SQL深度运用、AB测试实操、BI工具逻辑理解等能力要求远高于理论模型调优。本文聚焦新人最易踩坑的JD潜台词识别、跨行业重力场差异、技能投入优先级判断,提供可立即上手的实地作战

weixin_30307921的博客 746

520,IT工程师们都是如何表白的?

明天就是一年一度的520表白日,各位工程师们,想好怎么跟喜欢的人表白了吗?小编来给大家点启发~   前端: 买个她名字的域名,然后写呗~   技术: 直接上图~   文艺派: 为你写诗~ 我能抽象出整个世界 但是我不能抽象出你 我懂得重载甚至覆盖这个世界里的任何一种方法 但是我却不能重载对你的思念 也许命中注定了 你在我的世界里永远的烙上了静态的属性 而我不慎

从软件测试的世界路过 1785

看看人家程序员是怎么表白的 !(附教程~)

10月24日是程序员节,又叫码农节。数据派首先祝各位程序员节日快乐~(祝愿大家今日无BUG) 前不久,众多开发者齐聚云栖大会,但杭州大妈为女儿征婚抢了个头条。在“黑客马拉松”蚂蚁开发者编程大赛会场,蔡阿姨为女儿张贴征婚广告,征婚条件中仅加粗“程序员”三字,明确只考虑程序员。如今也有越来越多的女生把程序员列为重点择偶对象,网络上找程序员做男友的攻略火爆。程序员到底因为哪些特点成为了相亲市场

THU数据派 5万+

PIL包里面的Image模块里面的函数讲解,不能直接对numpy存储成图像,要进行转化再存取

导入该模块 from PIL import Image # 导入Image模块 它内置的属性如下: class Image(object): def __init__(self): # FIXME: take "new" parameters / other image? # FIXME: turn mode and size into del...

zz2230633069的博客 4158
上一篇: 使用蓝图构建Flask项目目录
下一篇: Python为文档批量注音(生僻字歌词为例)
清风Python
博客等级 码龄7年 406粉丝 267原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值