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, img.shape) >>> 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 ：