python实现添加文字水印到图片中间

1.环境python3
2. 需要用到的模块或包 os(内置模块),PIL(第三方模块,自己安装一下)

import os

from PIL import Image, ImageFont, ImageDraw


def add_text_to_image(imgpath="../img"):
# imgpath  需要加水印的图片位置
    for parent, dirnames, filenames in os.walk(imgpath):
        for filename in filenames:
            fullpath = os.path.join(parent, filename)
            if 'jpg' in fullpath:
            # 下面这两步是获取图片的名字,用于存储图片的时候 和原图保持一致
                image_name = os.path.split(fullpath)[1]
                name = os.path.splitext(image_name)[0]
                #  fullpath  图片的路径
                # 用RGBA的模式打开图片,
                im = Image.open(fullpath).convert('RGBA')
                # 创建一个和原图一样大小的图片
                txt = Image.new('RGBA', im.size, (0, 0, 0, 0))
                # 设置字体的大小  可以根据自己的需求来,我这边是按照图片的宽度的1/10之一当做水印文字的大小
                font_size = int(txt.size[0] / 10)
                # 设置字体 
                fnt = ImageFont.truetype("c:/Windows/Fonts/Tahoma.ttf", font_size)
                # 在新建的图片上添加字体
                d = ImageDraw.Draw(txt)
                
                # 获取字体大小位置
                text_size_x, text_size_y = d.textsize(font_txt, font=fnt)
                # helloworld  水印文字
                # font 指定字体
                # fill 指定文字颜色和透明度
                d.text(((txt.size[0] - text_size_x) / 2, (txt.size[1] - text_size_y) / 2), font_txt,
                           font=fnt,
                           fill=(255, 255, 255, 60))
                # 合并两张图片,并确定水印的位置
                out = Image.alpha_composite(im, txt)
                # out.show()
                # 由于我是用RGBA打开的图片,没有办法直接保存jpg  但是可以保存成png,想要保存jpg 需要先装换一个图片格式 out.convert('RGB')
                # RGBA意思是红色,绿色,蓝色,Alpha的色彩空间,Alpha指透明度。而JPG不支持透明度,所以要么丢弃Alpha,要么保存为.png文件
                out = out.convert('RGB')
                # 保存图片  路径+文件名字
                out.save("../img2/{}.jpg".format(name))

# 第一次处理图片,不足之处 还望多多指教
if __name__ == '__main__':
    add_text_to_image()
    

原图
加水印后

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章