使用PIL在Python中向图像添加水印

时间:2018-08-15 06:04:47

标签: python-3.x image python-imaging-library watermark

我正在尝试通过此算法使用PIL(枕头)向图像添加水印

def watermark_image_with_text(filename):
    text = 'Watermark'
    color = 'blue'
    fontfamily = 'arial.ttf'
    image = Image.open(filename).convert('RGBA')
    imageWatermark = Image.new('RGBA', image.size, (255, 255, 255, 0))
    draw = ImageDraw.Draw(imageWatermark)
    width, height = image.size
    font = ImageFont.truetype(fontfamily, int(height / 20))
    textWidth, textHeight = draw.textsize(text, font)
    x = width / 5
    y = height / 6
    draw.text((x, y), text, color, font)
    my_img = Image.alpha_composite(image, imageWatermark)
    my_img.save('water_' + filename.name)
    return 'water_' + filename.name

对于PNG文件效果很好,但不会将水印应用于其他文件格式的图像,例如JPG,JPEG,TIF等。 有人可以建议一种将水印应用于所有文件格式的图像的通用方法

  • 错误是cannot write mode RGBA as JPEG

1 个答案:

答案 0 :(得分:0)

错误是:

  

无法将RGBA模式写入JPEG

解决方案很简单。保存前将图像转换回RGB模式。

my_img.convert('RGB').save('water_' + filename.name)

发生这种情况是因为JPEG专为照片而设计。因此,它不支持透明性(照片不透明)。您必须明确丢弃透明度数据才能保存JPEG。