python利用PIL给图片打水印水印详解编程语言

import Image, ImageEnhance 
  
def 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 im 
  
def 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()

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/8346.html

(0)
上一篇 2021年7月18日
下一篇 2021年7月18日

相关推荐

发表回复

登录后才能评论