情人节后属于单身狗的浪漫

👦👦一个帅气的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()
  • 27
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 27
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Love And Program

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值