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

Posted

技术标签:

【中文标题】使用 PIL 在 Python 中为图像添加水印【英文标题】:Adding watermark to Image in Python using PIL 【发布时间】:2018-08-15 06:04:47 【问题描述】:

我正在尝试通过此算法使用 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】:

错误是:

无法将模式 RGBA 写入 JPEG

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

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

这是因为 JPEG 是为照片设计的。因此,它不支持透明度(照片不透明)。您必须明确丢弃透明度数据才能保存 JPEG。

【讨论】:

以上是关于使用 PIL 在 Python 中为图像添加水印的主要内容,如果未能解决你的问题,请参考以下文章

python图像处理图像水印和PIL模式转化

python----图像简单处理(PIL or Pillow)

PIL图片添加文字水印

我应该如何在 Android 中为图像添加水印效果? [复制]

如何在 Android 中为图像添加水印效果?

以编程方式在 Android 中为视频添加图像帧或水印