python节日贺卡_用Python打造你的专属情人节贺卡,赶快发给TA浪漫一下吧

明天就是情人节了。这个情人节,注定是一个不能约会的情人节,但不能约会不代表不能浪漫。古人比我们出生早,那些浪漫的诗词早都被他们挖掘一空,比诗词我们肯定没有机会了。好在我们还有Python,不然都不知道该如何表达浪漫。接下来,浪导教你制作一个浪漫的情人节专属贺卡。

首先,准备一张你们的合影和一段深情的表白。浪导已经过了恋爱的年龄,照片和情话只好借用https://baijiahao.baidu.com/s?id=1658389297213946646&wfr=spider&for=pc里面的内容。 侵删。

原图及制作完成后的贺卡放在一起,效果如下图:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h1Zml2ZQ==,size_16,color_FFFFFF,t_70

1. 处理照片

我选择了这张图片:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h1Zml2ZQ==,size_16,color_FFFFFF,t_70

将人形的部分处理成纯白色:

>>> import cv2

>>> import numpy as np

>>> from PIL import Image

>>> img = cv2.imread('d:\\photo.jpg')

>>> mask = np.zeros(img.shape[:2], np.uint8)

>>> size = (1, 65)

>>> bgd = np.zeros(size, np.float64)

>>> fgd = np.zeros(size, np.float64)

>>> rect = (1, 1, img.shape[1], img.shape[0])

>>> cv2.grabCut(img, mask, rect, bgd, fgd, 10, cv2.GC_INIT_WITH_RECT)

>>> mask2 = np.where((mask == 2) | (mask == 0), 1, 255)

>>> img = img.astype(np.int32)

>>> img *= mask2[:, :, np.newaxis]

>>> img[img>255] = 255

>>> img =img.astype(np.uint8)

>>> img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

>>> img = Image.fromarray(img, 'RGB')

>>> img.save('d:\\mask.jpg')

最后的结果:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h1Zml2ZQ==,size_16,color_FFFFFF,t_70

稍微有点瑕疵,不要紧,这不影响后面的效果。

2. 生成词云

用wordcloud库,可以很轻松的生成词云,首先,安装wordcloud:

pip install wordcloud

安装完成,就可以生成词云了:

>>> from wordcloud import WordCloud

>>> fp = open(r"d:\情话.txt", "r")

>>> text = fp.read()

>>> text

'春风十里,不及相遇有你;晴空万里,不及心中有你。\n世人万千种,浮云莫去求;斯人若彩虹,遇上方知有。\n没有电影电视剧的浪漫,不敢许你三生三世,只愿给你两厅三室。\n你可以把余生交给我保管,可以霸占我情话里的每一句喜欢。\n青山不及你眉长,水清不似你目澈,跨过山水几场雨,我一生只要一个你。\n我并没有喜欢哪一种类型的人,如果我喜欢你,我喜欢的就只是你。\n春花,秋月,夏日清风,冬日暮雪,这些都很美,但唯有你的心里,才是我想去的四季。\n世上最牢固的感情不是“我爱你”,而是“我习惯了有你”。彼此依赖,才是最深的相爱。\n你在身边的时候,你就是整个世界;你不在身边的时候,整个世界都是你。\n这世界上你或许不是最优秀的人,但我爱上你的时候,你就是我的全世界!\n遇见你是无意,认识你是天意,想着你是情意,不见你时三心二意,见到你便一心一意。\n我看那晚霞是红的,因为它怀里搂着个太阳。我想我的脸也该是红的吧,因为我心里住着你。'

>>> wordcloud=WordCloud(font_path="C:/Windows/Fonts/simfang.ttf", background_color="black",width=600,height=300,max_words=50).generate(text)

>>> image=wordcloud.to_image()

>>> image.save("d:\\wordcloud1.png")

结果如下:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h1Zml2ZQ==,size_16,color_FFFFFF,t_70

wordcloud支持掩码,可以利用前面处理好的图片,生成指定形状的词云:

>>> import numpy as np

>>> from PIL import Image

>>> mask_pic=numpy.array(Image.open(r"d:\mask.jpg"))

>>> wordcloud = WordCloud(font_path=r"C:\Windows\Fonts\simfang.ttf",mask=mask_pic).generate(text)

>>> image=wordcloud.to_image()

>>> image.save("d:\\wordcloud2.png")

结果为:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h1Zml2ZQ==,size_16,color_FFFFFF,t_70

3. 生成贺卡

wordcloud不支持生成透明图片,我们需要自己把图片处理成透明:

>>> cloud_data = np.array(image)

>>> alpha = np.copy(could_data[:,:,0]) # 生成透明通道

>>> alpha[alpha>0] = 255 # 不是黑的地方设置为255

>>> new_image = Image.fromarray(np.dstack((cloud_data, alpha)))

最后使用PIL将两个图层进行合并:

>>> card = Image.open("d:\\photo.jpg")

>>> card = card.convert("RGBA")

>>> card.paste(new_cloud, (0,0), mask=new_cloud)

>>> card.save("d:\\card.png")

赶快发给女朋友浪漫一下吧:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h1Zml2ZQ==,size_16,color_FFFFFF,t_70

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值