带你用Python浪漫情人节(附源码)

简介: Python情人节的那些骚操作。
一年一度的情人家就要到来了,身边的人总是问我:送什么?二哥这么穷,这么不懂得浪漫的人送点什么呢!冥思苦想之后作为程序猿的我们总是要搞出来一点属于我们自己的浪漫,今天二哥就带着大家用Python“码”情人节。

PS:情人节当然是要送一个专属的礼物,本文的所有成果都可以定义,建议收藏!

❤️静态照片二维码

首先来一个简单点的静态照片二维码制作,用着她/他/它的照片,设置好你想说的话,生成照片就可以了。
这里我们可以配置多种参数来调整二维码的规格,下同。

  • words:二维码内容,链接或者句子(暂不支持中文)
  • veision:二维码大小,范围为[1,40]
  • level:二维码纠错级别,范围为{L,M,Q,H},H为最高级,默认。
  • picture:自定义二维码背景图,支持格式为 .jpg,.png,.bmp,.gif,默认为黑白色
  • colorized:二维码背景颜色,默认为 False,即黑白色
  • contrast:对比度,值越高对比度越高,默认为 1.0
  • brightness:亮度,值越高亮度越高,默认为 1.0,正常和对比度相同
  • save_name:二维码名称,默认为 qrcode.png
  • save_dir:二维码路径,默认为程序工作路径
from MyQR import myqr
myqr.run(words="Welcome to Here!",
         version=6,
         picture="lye.jpg",
         colorized=True,
         save_name="lye.png",
        )
# 如果想要更换存储路径,可以使用save_dir=""参数。        

结果展示如下:
请添加图片描述
怎么样,一个浪漫的二维码是不是能够帮你捕获她的芳心呢,不能的话咱们继续往下走~

🌟动态照片二维码

有了静态的二维码生成,肯定也少不了生成动态的二维码,生成动态二维码需要我们使用一个gif图片嵌入到二维码内部,这里二哥推荐大家使用一些视频片段或者是照片合集做成gif来使用。生成动态二维码的方式和上面静态二维码的方式相同,直接上代码:

from MyQR import myqr
myqr.run(
    words="I Love You",
    version=6,
    picture="linyuner.gif",
    colorized=True,
    save_name="lyeqr.gif",
)

结果展示如下(图没选好,微微的模糊了):
请添加图片描述
什么?她还觉得不满意?那咱们再来一个!

🌹字符词云图

做完了二维码,可能表白的力度还不够大, 怎么办呢?下面二哥再带大家做一个字符词云图,让大家能够把情话当背景用她/他/它的名字去进行填充。
实现字符词云图的整体思路如下:

  • 根据输入的字符,作成白底黑字的图片保存(一定不要用透明的背景,会造成绘制词云出错)
  • 读取上一步做好的图片,绘制词云图即可。

在词云的代码快中给出了各种能够对词云图的效果进行调整的注释,大家根据注释直接进行相应的调整即可,接下来直接上代码:

from wordcloud import WordCloud
import wordcloud
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from PIL import Image, ImageDraw, ImageFont
# 解决读取图片报错
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
import os

# 获取背景文字
def gen_text_img(text, font_size, font_path=None):
    '''
    输入:
    text:照片墙的样式文字
    font_size:字体的大小
    font_path:字体
    返回:
    文字图像
    '''
    font = ImageFont.truetype(font_path, font_size)
    (width, length) = font.getsize(text)
    text_img = Image.new('RGB', (width + 100, length+100), color='white')
    draw = ImageDraw.Draw(text_img)
    # 从左上角开始绘制,每次调整位置用于加粗字体
    for i in range(100):
        draw.text((i, i), text, fill=(0, 0, 0), font=font)
    text_img.save('background.png')
    return text_img


def word_cloud(img, word, font_path=None):
    
    wc_mask = np.array(Image.open('background.png'))
    wc = wordcloud.WordCloud(
        # 设置字体格式
        font_path=font_path,
        # 设置背景图
        mask=wc_mask,
        # 最多显示词数
        max_words=200,
        # 字体最大值
        max_font_size=320,
        # 整体背景色
        background_color='White',
        # 词云的边框大小
        contour_width=2,
        # 词云的边框颜色
        contour_color='pink',
        # 设置字体重复
        repeat=True,
        color_func=lambda *args, 
        **kwargs: "pink")

    # 从字典生成词云
    wc.generate(word)
    # 从背景图建立颜色方案
    image_colors = wordcloud.ImageColorGenerator(wc_mask)
    # 显示词云
    plt.figure(figsize=[10, 10], dpi=300)
    plt.imshow(wc)
    plt.axis('off')
    plt.show()

def main(font_path='buzz_cloud_font.ttf',
         font_size=2000,
         ):
    word = input('请输入填充词:')
    text = input('请输入背景词:')
    img = gen_text_img(text,font_size, font_path)
    word_cloud(img,word,font_path)
main()

结果展示如下(自恋一波):
在这里插入图片描述
这里偷偷的自己给自己做个图,友情提醒一下各位小伙伴们,不要打成别人的名字,还有每个字记得打正确了,不然又是少不了的家庭矛盾(别问我怎么知道的)。

💎满屏爱心表白

接下来我们还可以绘制一个满屏爱心的表白效果来炫一下。
该效果主要使用海龟做图的方法来绘制,首先定义好绘制普通爱心的代码,为了好看一些我们用随机的方式进行绘制,随机心出现的地址,随机颜色,随机大小,如过你想要更改随机的范围在代码中自行调整即可。具体细节在于角度的把控,这里不再做过多赘述,直接上代码。

import random
import turtle
from turtle import mainloop, hideturtle


# 画心
def draw_heart(size, color_):
    turtle.speed(0)
    turtle.colormode(255)
    turtle.color(color_)
    turtle.pensize(2)
    turtle.pendown()
    turtle.setheading(150)
    turtle.begin_fill()
    turtle.fd(size)
    turtle.circle(size * -3.745, 45)
    turtle.circle(size * -1.431, 165)
    turtle.left(120)
    turtle.circle(size * -1.431, 165)
    turtle.circle(size * -3.745, 45)
    turtle.fd(size)
    turtle.end_fill()


# 随机颜色,大小,位置
def draw():
    # 随机颜色
    colors1 = random.randint(0, 255)
    colors2 = random.randint(0, 255)
    colors3 = random.randint(0, 255)
    turtle.penup()
    # 随机位置
    x = random.randint(-400, 400)
    y = random.randint(-200, 200)
    turtle.goto(x, y)
    # 随机大小
    size = random.randint(10, 20)
    draw_heart(size, (colors1, colors2, colors3))


# 主函数
def main():
    hideturtle()
    turtle.setup(900, 500)
    # 更改心出现的个数
    for i in range(30):
        draw()
    turtle.penup()
    turtle.goto(-200, 0)
    turtle.color('Black')
    turtle.write('给二哥点个赞吧!', font=('宋体', 60, 'normal'))
    mainloop()


main()

效果如下:
请添加图片描述
这样一副满屏爱心的图看起来是不是还说得过去,这里又把自己挂上去了,希望大家点个赞吧~如果力度还不够,那就只能再画一个搞怪一点的图了。

🔥BiuBiuBiu~

最后,我们可以来一个搞怪的小人和爱心,小人要做出类似于龟派气功的造型,那种酷炫的动漫人物画起来太难,今天咱们先画一个简版的使用一下,小人的龟派气功中打出的是类似于我们上面画的那种小心心就可以了。直接看代码吧~

import turtle
import time
from turtle import mainloop, hideturtle


def clear_all():
    turtle.penup()
    turtle.goto(0, 0)
    turtle.color('white')
    turtle.pensize(800)
    turtle.pendown()
    turtle.setheading(0)
    turtle.fd(300)
    turtle.bk(600)


# 重定位海龟的位置
def go_to(x, y, state):
    turtle.pendown() if state else turtle.penup()
    turtle.goto(x, y)


def draw_heart(size):
    turtle.color('red', 'pink')
    turtle.pensize(2)
    turtle.pendown()
    turtle.setheading(150)
    turtle.begin_fill()
    turtle.fd(size)
    turtle.circle(size * -3.745, 45)
    turtle.circle(size * -1.431, 165)
    turtle.left(120)
    turtle.circle(size * -1.431, 165)
    turtle.circle(size * -3.745, 45)
    turtle.fd(size)
    turtle.end_fill()


# 画出发射爱心的小人
def draw_people(x, y):
    turtle.penup()
    turtle.goto(x, y)
    turtle.pendown()
    turtle.pensize(2)
    turtle.color('black')
    turtle.setheading(0)
    turtle.circle(60, 360)
    turtle.penup()
    turtle.setheading(90)
    turtle.fd(75)
    turtle.setheading(180)
    turtle.fd(20)
    turtle.pensize(4)
    turtle.pendown()
    turtle.circle(2, 360)
    turtle.setheading(0)
    turtle.penup()
    turtle.fd(40)
    turtle.pensize(4)
    turtle.pendown()
    turtle.circle(-2, 360)
    turtle.penup()
    turtle.goto(x, y)
    turtle.setheading(-90)
    turtle.pendown()
    turtle.fd(20)
    turtle.setheading(0)
    turtle.fd(35)
    turtle.setheading(60)
    turtle.fd(10)
    turtle.penup()
    turtle.goto(x, y)
    turtle.setheading(-90)
    turtle.pendown()
    turtle.fd(40)
    turtle.setheading(0)
    turtle.fd(35)
    turtle.setheading(-60)
    turtle.fd(10)
    turtle.penup()
    turtle.goto(x, y)
    turtle.setheading(-90)
    turtle.pendown()
    turtle.fd(60)
    turtle.setheading(-135)
    turtle.fd(60)
    turtle.bk(60)
    turtle.setheading(-45)
    turtle.fd(30)
    turtle.setheading(-135)
    turtle.fd(35)
    turtle.penup()


# 绘制文字
def draw_text(text, t_color, font_size, show_time):
    turtle.penup()
    turtle.goto(-350, 0)
    turtle.color(t_color)
    turtle.write(text, font=('宋体', font_size, 'normal'))
    time.sleep(show_time)
    clear_all()


# 爱心发射
def draw_():
    turtle.speed(0)
    draw_people(-250, 20)
    turtle.penup()
    turtle.goto(-150, -30)
    draw_heart(14)
    turtle.penup()
    turtle.goto(-200, -200)
    turtle.color('pink')
    turtle.write('Biu~', font=('宋体', 60, 'normal'))
    turtle.penup()
    turtle.goto(-20, -60)
    draw_heart(25)
    turtle.penup()
    turtle.goto(-70, -200)
    turtle.color('pink')
    turtle.write('Biu~', font=('宋体', 60, 'normal'))
    turtle.penup()
    turtle.goto(200, -100)
    draw_heart(45)
    turtle.penup()
    turtle.goto(150, -200)
    turtle.color('pink')
    turtle.write('Biu~', font=('宋体', 60, 'normal'))
    turtle.hideturtle()
    time.sleep(3)


def main():
    # 隐藏海龟
    hideturtle()
    turtle.setup(900, 500)

    draw_text("准备好了吗?", "black", 60, 0)
    draw_text("接下来", "skyblue", 60, 0)
    draw_text("马上七夕,码上七夕", "pink", 60, 3)
    draw_()
    # 使用mainloop防止窗口卡死
    mainloop()


main()

结果展示如下:
请添加图片描述
怎么样,赶紧行动起来吧,带着她的名字,她的照片,来一场属于程序猿的浪漫吧~

好了~到这里本期的“码”上情人节就到这里了。

走过,路过,不要错过!记得三连呦!

相关文章
|
3月前
|
Python
用python进行视频剪辑源码
这篇文章提供了一个使用Python进行视频剪辑的源码示例,通过结合moviepy和pydub库来实现视频的区间切割和音频合并。
72 2
|
20天前
|
JSON 开发工具 git
基于Python和pygame的植物大战僵尸游戏设计源码
本项目是基于Python和pygame开发的植物大战僵尸游戏,包含125个文件,如PNG图像、Python源码等,提供丰富的游戏开发学习素材。游戏设计源码可从提供的链接下载。关键词:Python游戏开发、pygame、植物大战僵尸、源码分享。
|
2月前
|
自然语言处理 Java 编译器
为什么要看 Python 源码?它的结构长什么样子?
为什么要看 Python 源码?它的结构长什么样子?
35 2
|
2月前
|
Python
源码解密 Python 的 Event
源码解密 Python 的 Event
45 1
|
2月前
|
数据采集 前端开发 Python
Python pygame 实现游戏 彩色 五子棋 详细注释 附源码 单机版
Python pygame 实现游戏 彩色 五子棋 详细注释 附源码 单机版
82 0
|
4月前
|
Ubuntu Linux 数据安全/隐私保护
使用Cython库包对python的py文件(源码)进行加密,把python的.py文件生成.so文件并调用
本文介绍了在Linux系统(Ubuntu 18.04)下将Python源代码(`.py文件`)加密为`.so文件`的方法。首先安装必要的工具如`python3-dev`、`gcc`和`Cython`。然后通过`setup.py`脚本使用Cython将`.py文件`转化为`.so文件`,从而实现源代码的加密保护。文中详细描述了从编写源代码到生成及调用`.so文件`的具体步骤。此方法相较于转化为`.pyc文件`提供了更高的安全性。
206 2
|
4月前
|
测试技术 Python
python自动化测试中装饰器@ddt与@data源码深入解析
综上所述,使用 `@ddt`和 `@data`可以大大简化写作测试用例的过程,让我们能专注于测试逻辑的本身,而无需编写重复的测试方法。通过讲解了 `@ddt`和 `@data`源码的关键部分,我们可以更深入地理解其背后的工作原理。
70 1
|
4月前
|
JSON 算法 API
京东以图搜图功能API接口调用算法源码python
京东图搜接口是一款强大工具,通过上传图片即可搜索京东平台上的商品。适合电商平台、比价应用及需商品识别服务的场景。使用前需了解接口功能并注册开发者账号获取Key和Secret;准备好图片的Base64编码和AppKey;生成安全签名后,利用HTTP客户端发送POST请求至接口URL;最后解析JSON响应数据以获取商品信息。
|
4月前
|
开发者 Python
深入解析Python `httpx`源码,探索现代HTTP客户端的秘密!
深入解析Python `httpx`源码,探索现代HTTP客户端的秘密!
101 1
|
4月前
|
开发者 Python
深入解析Python `requests`库源码,揭开HTTP请求的神秘面纱!
深入解析Python `requests`库源码,揭开HTTP请求的神秘面纱!
190 1