Tomorrow is Valentine's Day . This Valentine's Day , Destined to be a Valentine's day that can't be dated , But not dating doesn't mean not being romantic . The ancients were born before us , Those romantic poems have long been mined out by them , We certainly don't have a chance . Fortunately, we still have Python, Otherwise, I don't know how to express romance . Next , Wave guide teaches you to make a romantic Valentine's day exclusive greeting card .
First , Prepare a picture of you and a passionate expression . Langdao has passed the age of love , Photos and love words have to be borrowed https://baijiahao.baidu.com/s?id=1658389297213946646&wfr=spider&for=pc What's in it . Invasion and deletion .
Put the original picture and the cards together , The effect is as follows :
I chose this picture :
Treat the humanoid part to pure white :
>>> 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')
The final result :
A little bit flawed , It doesn't matter , This doesn't affect the effect behind .
use wordcloud library , It's easy to generate word clouds , First , install wordcloud:
pip install wordcloud
installation is complete , You can generate a word cloud :
>>> from wordcloud import WordCloud
>>> fp = open(r"d:\ Love words .txt", "r")
>>> text = fp.read()
>>> text
' The spring breeze miles , I can't meet you ; The sky is clear , Less than you in my heart .\n There are thousands of kinds in the world , Don't ask for it ; People like rainbow , I know you have .\n There is no romance in movies and TV plays , I don't dare you to live for three , I only want to give you two halls and three rooms .\n You can leave the rest of your life in my custody , I can take over every love sentence in my love words .\n Green mountains are not as long as your eyebrows , Water is not as clear as your eyes , Several rains across the mountains and rivers , I only want one you in my life .\n I don't like any kind of people , If I like you , All I like is you .\n Spring flowers , autumn moon , The summer breeze , It snows in winter , These are beautiful , But only your heart , It's the four seasons I want to go to .\n The strongest feeling in the world is not “ I love you! ”, It is “ I'm used to having you ”. Depend on each other , Is the deepest love .\n When you're around , You are the world ; When you're not around , The whole world is you .\n You may not be the best person in the world , But when I fell in love with you , You are my world !\n It's no intention to meet you , It's heaven to know you , Thinking about you is affection , When I don't see you , I'll see you with all my heart .\n I think that sunset is red , Because it has a sun in its arms . I think my face should be red too , Because I have you in my heart .'
>>> 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")
give the result as follows :
wordcloud Support mask , You can take advantage of the pictures you've processed , Generate word cloud of specified shape :
>>> 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")
The result is :
wordcloud Transparent image generation is not supported , We need to make the picture transparent :
>>> cloud_data = np.array(image)
>>> alpha = np.copy(could_data[:,:,0]) # Generate transparent channels
>>> alpha[alpha>0] = 255 # It's not a dark place set to 255
>>> new_image = Image.fromarray(np.dstack((cloud_data, alpha)))
Finally using PIL Merge the two layers :
>>> card = Image.open("d:\\photo.jpg")
>>> card = card.convert("RGBA")
>>> card.paste(new_cloud, (0,0), mask=new_cloud)
>>> card.save("d:\\card.png")
Send it to your girlfriend for romance :