使用Python的PIL_Image实现填充文字到图像

兴趣-Image

PIL有九种不同模式:

1: 1位像素,黑白,每字节一个像素存储
L: 8位像素,黑白
P: 8位像素,使用调色板映射到任何其他模式
RGB: 3x8位像素,真彩色
RGBA: 4x8位像素,带透明度掩模的真彩色
CMYK: 4x8位像素,分色
YCbCr: 3x8位像素,彩色视频格式
I: 32位有符号整数像素
F: 32位浮点像素

1. 导包
from PIL import Image
2. 选择图片并灰度处理
img=Image.open("image_file")
3.可以选择调整图片大小,可调可不调
height=100 //设置最大高度
img_width,img_height=img.size
width=int(1.8*height*img_width//img_height)
img=img.resize((width,height),Image.ANTIALIAS)=
img.convert('L') //灰度,还可以1 ,L/RGB 0(black) 255(white) RGBA P I...

4.提取灰度后的变成numpy array
img.show() //展示一下
pixels=np.array(img) //结果为0-256的width*heigh的二维数组
chars="MNHQ$OC?7>!:-;. " //填充字符,可以随便设置,最好索引越大字符越不明显,索引越小字符越明显
step=256//(len(chars)-1)
5.写入文件

    with open('imageTotxt.txt',mode='w+') as f:
        for i in range(height):
            result=''
            for j in range(width):
                try:
                    result+=chars[pixels[i][j]//step]
                except Exception:
                    print("error:"+str(pixels[i][j]//step))
            f.write(result+"\n")
完整代码
from PIL import Image
import numpy as np
if __name__ == "__main__":
    image_file='''d:\User\Pictures\\aliPan\\beng1.png'''
    height=100
    img=Image.open(image_file)
    img_width,img_height=img.size
    width=int(1.8*height*img_width//img_height)
    img=img.resize((width,height),Image.ANTIALIAS)
    imgs=img.convert('L')
    pixels=np.array(imgs)
    # imgs.show()
    print('type(pixels=',type(pixels))
    print(pixels.shape)
    print(pixels)
    chars="WRELOVYOU7C>!:-;. "
    N=len(chars)
    step=256//N
    with open('imageTotxt.txt',mode='w+') as f:
        for i in range(height):
            result=''
            for j in range(width):
                try:
                    result+=chars[pixels[i][j]//step]
                except Exception:
                    print("error:"+str(pixels[i][j]//step))
            f.write(result+"\n")

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用PIL库在Python填充周围的图片颜色,可以使用以下步骤: 1. 导入PIL库: ```python from PIL import Image ``` 2. 打开要填充图像: ```python img = Image.open('image.jpg') ``` 3. 将图像转换为RGB模式: ```python img = img.convert('RGB') ``` 4. 获取图像的宽度和高度: ```python width, height = img.size ``` 5. 遍历图像的每个像素点,如果像素点是空白(即颜色为白色),则使用附近的颜色进行填充。可以定义一个函数来获取周围像素点的颜色: ```python def get_average_color(x, y, n, img): """ 获取周围n个像素点的平均颜色 """ r, g, b = 0, 0, 0 count = 0 for xi in range(x-n, x+n+1): for yi in range(y-n, y+n+1): if xi >= 0 and yi >= 0 and xi < img.size[0] and yi < img.size[1]: pixel = img.getpixel((xi, yi)) r += pixel[0] g += pixel[1] b += pixel[2] count += 1 return (int(r/count), int(g/count), int(b/count)) ``` 6. 遍历每个像素点并进行填充: ```python n = 2 # 周围n个像素点 for x in range(width): for y in range(height): pixel = img.getpixel((x, y)) if pixel == (255, 255, 255): # 如果是空白,则填充周围的颜色 color = get_average_color(x, y, n, img) img.putpixel((x, y), color) ``` 7. 保存填充后的图像: ```python img.save('filled_image.jpg') ``` 完整的代码示例: ```python from PIL import Image def get_average_color(x, y, n, img): """ 获取周围n个像素点的平均颜色 """ r, g, b = 0, 0, 0 count = 0 for xi in range(x-n, x+n+1): for yi in range(y-n, y+n+1): if xi >= 0 and yi >= 0 and xi < img.size[0] and yi < img.size[1]: pixel = img.getpixel((xi, yi)) r += pixel[0] g += pixel[1] b += pixel[2] count += 1 return (int(r/count), int(g/count), int(b/count)) img = Image.open('image.jpg') img = img.convert('RGB') width, height = img.size n = 2 # 周围n个像素点 for x in range(width): for y in range(height): pixel = img.getpixel((x, y)) if pixel == (255, 255, 255): # 如果是空白,则填充周围的颜色 color = get_average_color(x, y, n, img) img.putpixel((x, y), color) img.save('filled_image.jpg') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厨 神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值