用Python为武汉加油!为中国加油!

获取原图的像素以及每个像素点的颜色,然后循环一行一行的来写"武汉加油!"。每个字的颜色用原图里面相应像素点的颜色来填充,只要原图像素够高(行数和列数足够多),还是能看出原图的轮廓,而当你放大的时候就会发现"武汉加油!中国加油!"藏在里面。
用Python为武汉加油!为中国加油!_第1张图片
原图:
用Python为武汉加油!为中国加油!_第2张图片
效果图:
用Python为武汉加油!为中国加油!_第3张图片
程序源代码:

from PIL import Image, ImageDraw, ImageFont

font_size = 6
text = "武汉加油!"
img_path = "D://dailylife//Pictures//0.jpg"

//读取图像,并使用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('C:/Windows/fonts/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("D://1.jpg")

从结果可以看出,上面的大字效果还可以,但下面稍小的字体就看不出来了,需要改变font_size 的值。当把此值设置为2时就非常清晰了,但也有一个问题,红色的背景此时并不是红色了。
用Python为武汉加油!为中国加油!_第4张图片

你可能感兴趣的:(日常)