【转】Python 添加图片水印_51CAE_新浪博客

#!/usr/bin/python

#-*- coding: utf-8 -*-


from PIL import Image

from PIL import ImageEnhance

POSITION = ('LEFTTOP','RIGHTTOP','CENTER','LEFTBOTTOM','RIGHTBOTTOM')

PADDING = 10

MARKIMAGE = 'water.png'

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(imagefile, markfile, position=POSITION[4], opacity=1):

    """Adds a watermark to an image."""    

    im = Image.open(imagefile)

    mark = Image.open(markfile)    

    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 == 'title':

        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))

    elif position == POSITION[0]:

        #lefttop

        position = (PADDING,PADDING)

        layer.paste(mark, position)

    elif position == POSITION[1]:

        #righttop

        position = (im.size[0] - mark.size[0]-PADDING, PADDING)

        layer.paste(mark, position)

    elif position == POSITION[2]:

        #center

        position = ((im.size[0] - mark.size[0])/2,(im.size[1] - mark.size[1])/2)

        layer.paste(mark, position)

    elif position == POSITION[3]:

        #left bottom

        position = (PADDING,im.size[1] - mark.size[1]-PADDING,)

        layer.paste(mark, position)

    else:

        #right bottom (default)

        position = (im.size[0] - mark.size[0]-PADDING, im.size[1] - mark.size[1]-PADDING,)

        layer.paste(mark, position)

    # composite the watermark with the layer

    return Image.composite(layer, im, layer)

watermark(new_image_s_filename,MARKIMAGE,POSITION[4],opacity=1).save(new_image_s_filename,quality=90)


最后,上一张实际效果图~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值