如何使用Python Pillow快速实现黑白背景上的文字颜色自动反显
Pillow实现文字像素自动反显的高效方案
你可以通过PIL内置的ImageChops模块和图像合成功能实现需求,所有像素操作都在底层C层执行,相比Python层逐像素遍历效率提升数十倍,完全满足大尺寸图像的处理需求。
实现逻辑
核心思路是通过文字蒙版提取需要反色的区域,直接批量反色后合成到原图:
- 生成和原图尺寸一致的灰度蒙版,在指定位置绘制白色文字,其余区域为黑色
- 生成整张原图的反色图像
- 以文字蒙版为遮罩,将反色图像中对应文字的区域合成到原图上,得到最终效果
可运行代码示例
from PIL import Image, ImageDraw, ImageFont, ImageChops def add_reverse_color_text(origin_img, text, text_pos, font): # 生成文字蒙版,文字区域为白色(255),其余区域为黑色(0) text_mask = Image.new('L', origin_img.size, 0) draw = ImageDraw.Draw(text_mask) draw.text(text_pos, text, fill=255, font=font) # 生成原图的反色图 reversed_img = ImageChops.invert(origin_img) # 按蒙版合成:文字区域显示反色图,其余区域显示原图 result_img = Image.composite(reversed_img, origin_img, text_mask) return result_img # 调用示例 if __name__ == "__main__": # 读取你的黑白图像,若为RGB模式可去掉.convert('L') img = Image.open("your_image_path.png").convert('L') # 加载字体,替换为你系统中的字体路径,第二个参数为字号 use_font = ImageFont.truetype("C:/Windows/Fonts/msyh.ttc", 50) # 添加反显文字,(100, 100)为文字左上角坐标 final_img = add_reverse_color_text(img, "测试反显文字", (100, 100), use_font) # 保存结果 final_img.save("result.png")
注意事项
- 该方法支持单通道灰度图、三通道RGB图、带透明通道的RGBA图,只需对应调整输入图像的模式即可
- 字体路径需要替换为你设备上实际存在的字体文件路径,避免加载字体报错
- 若需要调整文字透明度,修改蒙版中文字的fill值即可,数值越低文字越透明
内容的提问来源于stack exchange,提问作者GT Electronics
相关产品推荐
相关产品推荐

