当前位置: 首页 > 后端技术 > Python

用Python做一个情人节告白神器

时间:2023-03-26 15:49:29 Python

思路来自于《Python编程时间》,我稍微改进了一下,主要是通过tkinter写了一个接口方便使用,良心大家可以关注一下《Python编程时间》“公众号。文末给出了打包好的软件。无需安装Python环境和各种依赖。直接下载软件。解压后,双击exe文件即可使用。先来看看具体效果吧。运行程序。点击“选择图片”,选择JPG/JPGE/PNG三种格式中的任意一种图片,点击生成告白图片。比如我选了一张《进击的巨人》的图片,生成的效果如下。如果把图片放大,你会发现图片全是“我喜欢你!”组成的。在编码的那一刻,我们知道图片是由不同的像素组成的,每个像素都有自己的颜色,用RGB表示,如图。(图片来自easyai)RGB本身就是一个数组:(a,b,c),数组中每一位的取值范围是0~255,比如黑色可以用(0,0,0)表示.我只需要取出图片中每个像素点的RGB值,将这个RGB值作为字体的颜色,这样生成的图片从远处看还是原图的轮廓。有了具体的想法,就可以写代码了。完整代码在文末。让我们先看看关键的代码片段来理解这些想法。在Python中,可以通过PIL实现对图片的各种操作。首先安装PIL。pipinstallpillowPIL是被动维护的。一群爱好者对PIL的代码进行了fork,并对其进行了维护和修改。fork之后的代码项目叫做pillow。首先通过PIL.Image打开图片,通过load方法加载图片数组#打开图片img_raw=Image.open(img_path)#加载图片的像素数组img_array=img_raw.load()然后新建一个canvas并将其设置为用于绘制要生成的图像的字体和字体大小。img_new=Image.new("RGB",img_raw.size,(0,0,0))draw=ImageDraw.Draw(img_new)font=ImageFont.truetype('SimHei.ttf',font_size)最后循环img_raw和将图像像素数组对应的值赋值给字体,作为字体的颜色。foryinrange(0,img_raw.size[1],font_size):forxinrange(0,img_raw.size[0],font_size):#绘制文本并指定颜色,特别是填充参数draw.text((x,y),next(ch_gen),font=font,fill=img_array[x,y],direction=None)然后你就完成了。能否进一步优化?为了方便没有编程经验的朋友,我决定用tkinter做一个简单的界面,然后用pyinstaller打包,这样就可以开箱即用,不用安装Python环境和太平船务。tkinter是Python的内置桌面应用程序框架。与PyQT5相比,更便携,但功能也更简单,但对于开发自白神器来说已经足够了。tkinter是用Python构建的。不能安装,可以直接使用。这里也给出了部分代码,完整代码见文末。首先创建一个界面。self.window=windowself.window.title('告白神器')self.window.geometry('300x200')menubar=Menu(self.window)然后定义两个按钮和对应的响应方式。#选择图片btn1=Button(window,text='selectimage',width=15,height=2,command=self.get_img)btn1.pack()#生成图片self.send_btn=Button(window,text='generateConfessionImage',width=15,height=2,command=self.gen_img)self.send_btn.pack()当点击SelectImage按钮时,会调用get_img方法,具体代码如下。defget_img(self):globalIMGPATH#选择文件filenames=askopenfilenames(filetypes=(("jpegimg","*.jpeg"),("jpgimg","*.jpg"),("pngimg","*.png")))iflen(filenames)>0:fnlist=[fnforfninfilenames]fnstr='\n'.join(fnlist)self.l.config(text=fnstr)#显示选中的内容fileIMGPATH=fnlistelse:self.l.config(text='Currentlynoimagefilesselected')上面代码中的get_img方法通过tkinter的askopenfilenames方法打开系统的文件选择框,指定可以获取的文件通过filetypes参数类型选择,最后这个方法会返回文件的完整文件路径。点击生成图片时,会调用gen_img方法。该方法是调用前面写的方法生成图片,这里不再赘述。最后为了方便大家,我通过pyinstaller打包了供词程序。windows下的朋友可以直接下载,然后解压使用,在压缩包中找到loveyou.exe,双击运行。注意:表白图片会生成在loveyou.exe所在的目录下。链接:https://pan.baidu.com/s/1y063...关注“懒人编程”回复“告白”获取完整代码提取码程序也在github上开源,链接为:https//github。com/ayuLiao/IL….如果文章对您有帮助,请点击“在看”,让更多人知道我。