原理:大概是先把原先图片的每个像素放大12倍,因为汉字的大小是12x12像素,这样就可以把汉字放进去了。
python代码如下:
import sys
try:
import pillow
except :
import os
os.system('pip install pillow -i https://pypi.mirrors.ustc.edu.cn/simple/')
from PIL import Image, ImageDraw, ImageFont
CHILD_W = CHILD_H = 16 # 子图的尺寸,宽和高都是16像素
txt = '和重剑DS一起玩(⊙v⊙)/' # 替代图片像素的文字(输出内容)
font = ImageFont.truetype('AliPuHui-Bold.ttf', CHILD_W) # 字体及大小,选用粗体字体效果更好
# 程序入口
if __name__ == '__main__': #只有在文件作为脚本直接执行时后面的语句才会被执行,而 import 到其他脚本中后面的语句是不会被执行的
#imgSrc = Image.open(sys.argv[1]) #可以通过在命令行输入命令的方式在运行该脚本时给出源图片的名字
imgSrc = Image.open('rem.PNG') #->这里直接给出源图片名(需要在同一文件夹下),作用同上
w, h = imgSrc.size # 源图像宽和高
imgChild = Image.new("RGB", (CHILD_W, CHILD_H)) # 新建子图
imgDst = Image.new("RGB", (CHILD_W*w, CHILD_H*h) ) # 创建目标图像的空图,待填充
textW, textH = font.getsize("迷") # 取得单个文字的宽、高信息
offsetX = (CHILD_W - textW) >> 1 # 文字水平居中绘制
offsetY = (CHILD_H - textH) >> 1 # 文字垂直居中绘制
charIndex = 0 # 序号,代表当前绘制哪个汉字
draw = ImageDraw.Draw(imgChild) # 取得小图的绘图对象,用于绘制文字
print("开始处理图片...")
for y in range(h):
for x in range(w):
draw.rectangle( (0, 0, CHILD_W, CHILD_H), fill = 'lightgray' ) # 灰色背景效果比外色略好
draw.text( (offsetX, offsetY), txt[charIndex], font = font, fill = imgSrc.getpixel((x, y)) )
imgDst.paste(imgChild, (x*CHILD_W, y*CHILD_H)) # 把绘制好的子图填到imgDst里
charIndex += 1 # 序号加1,从而依次绘制每个字
if charIndex == len(txt): # 循环绘制
charIndex = 0
#imgDst.save(sys.argv[2]) # 可以通过在命令行输入命令的方式在运行该脚本时 给出目标图片的名字
imgDst.save('test.png') # ->直接给出目标图片的名字,作用同上
# 原作者:B站UP主:偶尔有点小迷糊
# 代码讲解视频:https://www.bilibili.com/video/BV1mq4y1n7aE/
效果
版权声明:本文为qq_45732909原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。