👦👦一个帅气的boy,你可以叫我Love And Program
🖱 ⌨个人主页:Love And Program的个人主页
💖💖如果对你有帮助的话希望三连💨💨支持一下博主
情人节的浪漫不属于我
前言
七夕节,想给未来女朋友发一个小心心,你还是向下面一样,单纯的发一个爱你咩,大直男!
文字替换图片内容
首先用PIL
库获取到图片:
img_raw = Image.open(img_path)
然后需要获取图片中每个像素点的RGB值,需要执行对象的load()方法读取数据,为后续文字效果fill
填充做准备:
draw = ImageDraw.Draw(img_new)
然后我们选择SimHei.ttf
字体,这个可以显示中文字符(选其他的也可以),并设定文字大小:
font = ImageFont.truetype(font='SimHei.ttf',size=font_size, encoding="utf-8")
然后生成文字,我们每间隔一段打印一个文字,直至到输入图片尺寸的边界:
# 生成字体
i = 0
for y in range(0, img_raw.size[1], font_size):
for x in range(0, img_raw.size[0], font_size):
# 为字体赋值相应的颜色
if i < text_len:
draw.text((int(x), int(y)), text=text[i] ,font=font ,fill=img[int(x), int(y)], direction=None)
i += 1
else:
i = 0
最后保存图片:
save_img = img_new.convert('RGB')
save_img.save(savepath)
biaobai.py代码
第一个py
全部代码:
# biaobai.py
from PIL import Image, ImageDraw, ImageFont
def baiobai_progrom(img_path, savepath):
'''生成文字拼接而成的图片'''
font_size = 15
text = "我爱你!"
text_len = len(text)
img_raw = Image.open(img_path)
img = img_raw.load()
img_new = Image.new("RGB", img_raw.size, (0, 0, 0))
draw = ImageDraw.Draw(img_new)
font = ImageFont.truetype(font='SimHei.ttf',size=font_size, encoding="utf-8")
# 生成字体
i = 0
for y in range(0, img_raw.size[1], font_size):
for x in range(0, img_raw.size[0], font_size):
# 为字体赋值相应的颜色
if i < text_len:
draw.text((int(x), int(y)), text=text[i] ,font=font ,fill=img[int(x), int(y)], direction=None)
i += 1
else:
i = 0
save_img = img_new.convert('RGB')
save_img.save(savepath)
GUI界面
主要程序已经写完了,我们来设计一个小界面:
def __init__(self, window,Img_path):
self.window = window
self.Img_path = Img_path
self.window.title('我爱你!!!')
self.window.geometry('521x521')# 1314
# 显示
self.display = Label(window, text='')
self.display.pack(padx=10, pady=15) # 固定窗口位置
# 选择图片
btn = Button(window, text='选择表白图片', width=30, height=2, command=self.get_img)
btn.pack()
# 生成图片
self.send_btn = Button(window, text='点此生成你的表白图片', width=30, height=2, command=self.gen_img)
self.send_btn.pack()
正常界面为下图:
选择图片后为:
我们接下来实现图片文件的自由选择,选择图片输入格式jpeg,jpg,png
三种格式,主要代码为:
def get_img(self):
# 选择图片格式
filenames = askopenfilenames(filetypes=(("jpeg img", "*.jpeg"), ("jpg img", "*.jpg"), ("png img", "*.png")))
if len(filenames) > 0:
fnlist = [fn for fn in filenames]
self.display.config(text='已选择文件')
self.Img_path = fnlist
else:
self.display.config(text='请选择图片文件')
最后当然是调用生成文字的函数啦:
def end_img(self):
for imgpath in self.Img_path:
Filepath,Filename = os.path.split(imgpath)
Filename,Extension = os.path.splitext(Filename)
savepath = f'爱你宝贝{Extension}'
baiobai_progrom(imgpath, savepath)
showinfo('转换成功!','我爱你(๑′ᴗ‵๑)I Lᵒᵛᵉᵧₒᵤ❤')
成功转换后提示你转换成功:
最后效果图如下:
aini_program.py代码
# aini_program.py gui部分代码
import os
from tkinter import Tk, Menu, Label, Button
from tkinter.messagebox import showinfo
from tkinter.filedialog import askopenfilenames
from biaobai import baiobai_progrom
class GUI_Design(object):
def __init__(self, window,Img_path):
self.window = window
self.Img_path = Img_path
self.window.title('我爱你!!!')
self.window.geometry('521x521')# 1314
# 显示
self.display = Label(window, text='')
self.display.pack(padx=10, pady=15) # 固定窗口位置
# 选择图片
btn = Button(window, text='选择表白图片', width=30, height=2, command=self.get_img)
btn.pack()
# 生成图片
self.send_btn = Button(window, text='点此生成你的表白图片', width=30, height=2, command=self.gen_img)
self.send_btn.pack()
def get_img(self):
# 选择图片格式
filenames = askopenfilenames(filetypes=(("jpeg img", "*.jpeg"), ("jpg img", "*.jpg"), ("png img", "*.png")))
if len(filenames) > 0:
fnlist = [fn for fn in filenames]
self.display.config(text='已选择文件')
self.Img_path = fnlist
else:
self.display.config(text='请选择图片文件')
def gen_img(self):
for imgpath in self.Img_path:
Filepath,Filename = os.path.split(imgpath)
Filename,Extension = os.path.splitext(Filename)
savepath = f'爱你宝贝{Extension}'
baiobai_progrom(imgpath, savepath)
showinfo('转换成功!','我爱你(๑′ᴗ‵๑)I Lᵒᵛᵉᵧₒᵤ❤')
if __name__ == '__main__':
Img_path = ''
window = Tk()
GUI_Design(window,Img_path)
window.mainloop()