原理介绍
- 运用到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+",请查收~")
运行效果图:
- 用户可以输入自定义的刻字
- 选择需要刻字的内容
- 等待加载......
- 完成后自动生成完成报告