首页 > 编程 > Python > 正文

python使用PIL模块实现给图片打水印的方法

2020-02-23 01:20:34
字体:
来源:转载
供稿:网友

本文实例讲述了python使用PIL模块实现给图片打水印的方法。分享给大家供大家参考。具体实现方法如下:

import Image, ImageEnhancedef reduce_opacity(im, opacity):  """Returns an image with reduced opacity."""  assert opacity >= 0 and opacity <= 1  if im.mode != 'RGBA':    im = im.convert('RGBA')  else:    im = im.copy()  alpha = im.split()[3]  alpha = ImageEnhance.Brightness(alpha).enhance(opacity)  im.putalpha(alpha)  return imdef watermark(im, mark, position, opacity=1):  """Adds a watermark to an image."""  if opacity < 1:    mark = reduce_opacity(mark, opacity)  if im.mode != 'RGBA':    im = im.convert('RGBA')  # create a transparent layer the size of the image and draw the  # watermark in that layer.  layer = Image.new('RGBA', im.size, (0,0,0,0))  if position == 'tile':    for y in range(0, im.size[1], mark.size[1]):      for x in range(0, im.size[0], mark.size[0]):        layer.paste(mark, (x, y))  elif position == 'scale':    # scale, but preserve the aspect ratio    ratio = min(      float(im.size[0]) / mark.size[0], float(im.size[1]) / mark.size[1])    w = int(mark.size[0] * ratio)    h = int(mark.size[1] * ratio)    mark = mark.resize((w, h))    layer.paste(mark, ((im.size[0] - w) / 2, (im.size[1] - h) / 2))  else:    layer.paste(mark, position)  # composite the watermark with the layer  return Image.composite(layer, im, layer)def test():  im = Image.open('test.png')  mark = Image.open('overlay.png')  watermark(im, mark, 'tile', 0.5).show()  watermark(im, mark, 'scale', 1.0).show()  watermark(im, mark, (100, 100), 0.5).show()if __name__ == '__main__':  test()

希望本文所述对大家的Python程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表