Python硬核技能,帮你在520俘获女神芳心

开发 后端
今天是520,可预期到的是,估计有很多年轻的情侣们,已经为这个节日提前准备好久了吧?烂大街的套路无非就是送花、吃饭、电影院,看完电影找酒店。作为一个引爆消费的特别日子,程序猿们如何过节呢?

 今天是个花钱的日子

今天是520,可预期到的是,估计有很多年轻的情侣们,已经为这个节日提前准备好久了吧?烂大街的套路无非就是送花、吃饭、电影院,看完电影找酒店。作为一个引爆消费的特别日子,程序猿们如何过节呢?

[[326771]]

 

一行代码画爱心

这个骚操作不知道诱惑了多少人去学python,其实怎么说,如果真的代码写成那个样子,下班走夜路最好自带三级头,不然很容易挨闷棍。代码如下:

 

  1. print('\n'.join([''.join([('LovePython'[(x-y)%10]if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3<=0 else' ')for x in range(-30,30)])for y in range(15,-15,-1)])) 

效果:

 

技术是不错,但是如果你把这个当做礼物送给女朋友,除非你是不想见到明天的太阳了...

今天就要教大家更犀利的骚操作!

 

美图秀秀

现在不说妹子的手机有没有美图秀秀之类的美化软件了,连很多爷们儿的手机都有这些软件你敢信?

 

美图秀秀有一个拼图的功能,你可以手动选择心形拼图,然后把你喜欢的图片一张一张的贴到对应的方框内,最终做出一个心形的图片...

那么今天,我就教大家使用Python,绘制一个心形的女友照片墙!

 

心形布局图

美图秀秀上,存在了大小图的分类,我们为了降低难度,都是用等比例的图片,进行心形绘图。首先我们需要先画出来一个心形的图片,然后按照小格子进行分类。

我拿html配合css简单做了一个心形的图,大家先来看看效果。

 

 

 

 

因为是边想边做的格子,所以拿ul标签一点一点拼出来的,没有使用js去动态生成...

 

 

 

 

怕前端大神嘲讽,就不贴代码了太占内容(文末会随python代码一起提供下载路径...)

这是一个9X9的div排列框体,我们只需要将红色的方框填充上女友的图片,即可完成心形照片墙的效果。你说自己没有女友?没关系啊,你给心仪的妹子做一个心形照片墙,说不定今天你就有了!当然你也可以为你的基友做一个,我这人很开明,不鼓励不排斥,哈哈.....

 

准备图片

首先你需要整理一些女友的图片,这个是大前提!介于隐私,所以我从百度上爬了几十张的图片,用来作为示例:

 

 

 

 

这里有人要问了,数了一下上面红色的方格一共有52个,你只有37张图片,怎么做?

我们需要引入random模块,并且使用random.sample将图片的list进行动态选择并填充。这样就解决了大家图片数量不固定的问题,你可以放几千张选也可以只放一张!

 

图片合成

昨天写到的python图片转素描画中使用到了pillow库,今天我们一样用它就能实现!

 

  1. def mark_pictures(self): 
  2.        heart_image = Image.new('RGB', (128 * SideLength, 128 * SideLength)) 
  3.        row = col = 0 
  4.        for side in range(SideLength * SideLength): 
  5.            if images_side_calc(col, row): 
  6.                img = Image.open(random.choice(self.image_list)) 
  7.                img = img.resize((128, 128), Image.ANTIALIAS) 
  8.            else
  9.                img = Image.new("RGB", (128, 128), (255, 255, 255)) 
  10.            heart_image.paste(img, (row * 128, col * 128)) 
  11.            col += 1 
  12.            if col == SideLength: 
  13.                col = 0 
  14.                row += 1 
  15.            if row == col == SideLength: 
  16.                break 
  17.        heart_image.save("heart_image.jpg"

我们先创建一个空的画布,然后规定每张图片的固定尺寸为128X128,然后我们按照红框的计算,动态填充图片或者白色的幕布。最终将图片合成保存。

至于如何计算心形,除了最后的三角形有规律可循,上面的几行,只能每行去单独判断了images_side_calc方法如下:

 

  1. def images_side_calc(row, col): 
  2.     if row == 0 and col in [1, 2, 6, 7]: 
  3.         return True 
  4.     elif row == 1 and col not in [3, 4, 5]: 
  5.         return True 
  6.     elif row == 2 and col != 4: 
  7.         return True 
  8.     elif row in [3, 4]: 
  9.         return True 
  10.     elif row >= 5 and (row - 5) < col < (13 - row): 
  11.         return True 

最终效果如下:

 

大家可以看到,由于我只使用了37张图片,所以会出现一些随机重复的图片,大家使用的话,可以多选择一些照片,效果会更好一些!

 

打包为exe文件

既然工具写好了,当然要方便那些没有python环境的人们使用啊,使用pyinstaller打包工具,无需依赖python环境,双击exe输入图片存储地址,皆可完成心形照片墙的绘制:

 

 

OK,今天的内容就到这里,希望内容对你有所帮助。

责任编辑:华轩 来源: 清风Python
相关推荐

2012-03-02 15:08:37

微软Windows 8

2011-10-28 17:06:32

编程

2015-05-20 10:58:39

戴尔任意云Any Cloud

2020-03-08 17:23:19

科技女神程序员

2014-11-24 10:50:29

EC营客通即时通讯

2019-11-11 17:42:02

前端开发编程

2015-04-22 09:33:41

2013-07-17 14:22:33

用户增长

2015-07-30 17:23:03

APP

2021-04-19 13:57:12

神经网络AI算法

2020-04-25 19:15:38

曙光

2016-09-29 12:25:19

AWS猎豹移动

2017-11-13 22:22:10

编程码农谷歌

2018-02-09 15:28:27

开发者语言年龄

2020-02-12 11:20:10

数据科学数据技能

2020-09-02 13:56:03

Python可视化数据

2022-03-07 10:29:10

络安全人才CIO全栈工程师

2019-11-07 09:08:19

Python工具双11

2023-12-10 21:56:29

Pyt hon截图PyQt
点赞
收藏

51CTO技术栈公众号