python给图片加满文字

from PIL import Image, ImageDraw, ImageFont

font_size = 7
text = "自定义文字"
img_path = "input.jpg"

# 首先,使用 pillow.Image读取图像,并使用load函数获取到每一个像素值。
img_raw = Image.open(img_path)
img_array = img_raw.load()

# 然后新建一张画布,并选好你要使用的字体和字体大小。
img_new = Image.new("RGB", img_raw.size, (0, 0, 0))
draw = ImageDraw.Draw(img_new)
font = ImageFont.truetype('Dengl.ttf', font_size)

# 由于需要不断循环 “自定义文字”,这五个字符。所以这里可以while循环 yield 来实现一个生成器。
def character_generator(text):
    while True:
        for i in range(len(text)):
            yield text[i]

ch_gen = character_generator(text)

# 最后,要给这些字加上相应的颜色,写入新创建的画布中。
for y in range(0, img_raw.size[1], font_size):
    for x in range(0, img_raw.size[0], font_size):
        draw.text((x, y), next(ch_gen), font=font, fill=img_array[x, y], direction=None)

# 最后将成品保存
img_new.convert('RGB').save("save.jpeg")

原理就是
事实上,每一张图片都是由一个一个的像素点所组成的。而每个像素点,都有自己的颜色,其颜色可以用一个数组来表示:(a,b,c),其中每位数的取值范围都是 0-255。

比如(0,0,0)代表白色,(255,255,255)代表黑色。

当像素点足够多的时候,这张照片就是我们所说的高清照片。

而如果当像素点太少,我们的肉眼就能感知到明显的锯齿感。

用 Excel 画了个图,每一方格代表一个像素,其中若我的字体的大小设置 5(非字号5,而是每个字占用5个像素)。

我只要每个像素取出一个像素值,并使用这个像素做为该字的颜色即可,在像素量够多的情况下,从远处看,是能看到我们原来图像的轮廓的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值