- 原理介绍
- 运用到Pillow,没有安装的使用 pip install Pillow安装即可
- 将要刻的字放到图片像素里面
- 实现思路
- 创建文案信息:文案内容,像素尺寸,字体类型,图片路径:
- 创建小图来填充内容,再创建大图填充好小图内容;
- 循环遍历图片内的像素点,把文字粘贴上去。
实现代码:
# -*- coding:utf-8 -*-
# @Time : 2021-12-20
# @Author : 他们叫我技术总监
import time
import tkinter as tk#导入tkinter包
import datetime as dt
from tkinter import filedialog
from PIL import Image,ImageDraw,ImageFont
now_time=dt.datetime.now().strftime('%F%T')
now_time=now_time.replace(':','')
#print(now_time)
#像素放大尺寸
img_king_size = 20
#输入内容
print("-----------------照片刻字器----------------------------")
text =input("请输入你要刻的字:") #'我爱你春春小公主'
print("刻字为:"+text)
time.sleep(1)
#设置字体
font = ImageFont.truetype('simsun.ttc',img_king_size)
print("请选择刻字的图片")
#图片路径
#获取用户打开的文件路径名
root=tk.Tk()
#
#Folderpath=filedialog.askdirectory()#获取选择好的文件夹
Filepath=filedialog.askopenfilename()#获取选择好的文件
print("文件名:",Filepath)
root.withdraw
img_path =Filepath #'./520.jpg'
#避免卡顿,sleep 2秒
time.sleep(2)
#打开图片
img = Image.open(img_path)
img_w,img_h = img.size
#创建一个小图,用于填充字体
img_child = Image.new("RGB", (img_king_size, img_king_size))
#创建一个大图,状态填充好的小图字体
img_ans = Image.new("RGB",(img_w * img_king_size,img_h * img_king_size))
#获取单个文字的宽和高
text_w,text_h = font.getsize('中')
#文字水平居中
offset_x = (img_king_size - text_w) >> 1
#文字垂直居中
offset_y = (img_king_size - text_h) >> 1
char_index = 0
#小图用于绘制文字
draw = ImageDraw.Draw(img_child)
#循环遍历原图的每一个像素点
for x in range(img_w):
for y in range(img_h):
#绘制背景,让图片更好看
draw.rectangle((0,0,img_king_size,img_king_size),fill = 'lightgray')
#用(x,y)处的像素点的色值进行绘制字体
draw.text((offset_x,offset_y),text[char_index],font = font,fill = img.getpixel((x,y)))
img_ans.paste(img_child,(x * img_king_size,y * img_king_size))
char_index = (char_index + 1) % len(text)
img_ans.save(now_time+'520-letter.jpg')
finishpt=now_time+'-520letter.jpg'
print("成功生成你表白的照片"+finishpt+",请查收~")
运行效果图:
- 用户可以输入自定义的刻字
- 选择需要刻字的内容
- 等待加载......
- 完成后自动生成完成报告