python2给图片添加文字水印--文字旋转

在各大网站办理业务,经常要传各种证件,给这些证件添加水印是很有必要的。不啰嗦直接上代码:

第一种:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from PIL import Image, ImageDraw, ImageFont

# 指定要使用的字体和大小;

font = ImageFont.truetype('C:/Windows/Fonts/SimHei.ttf', 36,encoding="utf-8")

# image: 图片  text:要添加的文本 font:字体
def add_text_to_image(image, text, font=font):
  rgba_image = image.convert('RGBA')
  text_overlay = Image.new('RGBA', rgba_image.size, (255, 255, 255, 0))
  image_draw = ImageDraw.Draw(text_overlay) 
  text_size_x, text_size_y = image_draw.textsize(text, font=font)
  # 设置文本文字位置
  print(rgba_image)
  # text_xy = (rgba_image.size[0] - text_size_x, rgba_image.size[1] - text_size_y)  #底部
  text_xy = ((rgba_image.size[0] - text_size_x)/2, (rgba_image.size[1] - text_size_y)/3) #中间
  # 设置文本颜色和透明度
  # image_draw.text(text_xy, text, font=font, fill=(76, 234, 124, 180))
  image_draw.text(text_xy, text, font=font, fill=(225, 225, 225, 225))
   # text_xy = (rgba_image.size[0] - text_size_x, rgba_image.size[1] - text_size_y)  #底部
  text_xy = ((rgba_image.size[0] - text_size_x)/2, 2*(rgba_image.size[1] - text_size_y)/3) #中间
  # 设置文本颜色和透明度
  # image_draw.text(text_xy, text, font=font, fill=(76, 234, 124, 180))
  image_draw.text(text_xy, text, font=font, fill=(225, 225, 225, 225))

  text_overlay = text_overlay.rotate(-45)
  image_with_text = Image.alpha_composite(rgba_image, text_overlay)

  return image_with_text

im_before = Image.open("test.jpg")
im_after = add_text_to_image(im_before, u"仅供办理中国版权保护中心各项申请使用")
im_after.show()
im_after.save(u'new_test.jpg',"PNG")

效果图:

new_test.jpg

第二种:批量添加水印

 #!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys,os,chardet
from PIL import Image, ImageDraw, ImageFont


def add_text_to_image(image, text):
     font = ImageFont.truetype('C:/Windows/Fonts/SimHei.ttf', 36)

     # 添加背景
     new_img = Image.new('RGBA', (image.size[0] * 3, image.size[1] * 3), (0, 0, 0, 0))
     new_img.paste(image, image.size)

     # 添加水印
     font_len = len(text)
     rgba_image = new_img.convert('RGBA')
     text_overlay = Image.new('RGBA', rgba_image.size, (255, 255, 255, 0))
     image_draw = ImageDraw.Draw(text_overlay)

     for i in range(0, rgba_image.size[0], font_len*40+100):
        for j in range(0, rgba_image.size[1], 200):
            image_draw.text((i, j), text, font=font, fill=(0, 0, 0, 50))
     # 水印图片旋转45°         
     text_overlay = text_overlay.rotate(-45)
     image_with_text = Image.alpha_composite(rgba_image, text_overlay)

     # 裁切图片
     image_with_text = image_with_text.crop((image.size[0], image.size[1], image.size[0] * 2, image.size[1] * 2))
     return image_with_text


def add_text_combine_imgs(folder_path, txt):
    """
    批量添加图片水印
    Args:
        folder_path (str): 源文件夹
        pdf_file_path (str): 输出路径
    """
    files = os.listdir(folder_path)
    png_files = []

    for file in files:
        if 'png' in file or 'jpg' or 'JPG' or 'PNG' in file:
            png_files.append(file)

    for file in png_files:
        #png_file = Image.open(file)
        #if png_file.mode == "RGBA":            
        #   png_file = png_file.convert("RGB")
        print file
        img = Image.open(folder_path + file)
        im_after = add_text_to_image(img, txt)
        shotname, extension = os.path.splitext(file)        
        im_after.save(folder_path + shotname+"_new"+extension,"PNG")


if __name__ == '__main__':
    if len(sys.argv) != 2:
        print(u"---图片添加水印---")
        print(u"例如: python imgdraw2.py 仅供办理中国版权保护中心各项申请使用")
    else:  
        txt = sys.argv[1]  
        txt = txt.decode('GB2312')
        folder = r"E:\tmp\\"        
        add_text_combine_imgs(folder, txt)

效果图:

test_new.jpg


标签:PIL truetype rotate alpha_composite