python使用PIL模块实现给图片打水印的方法
本文实例讲述了python使用PIL模块实现给图片打水印的方法。分享给大家供大家参考。具体实现方法如下:
importImage,ImageEnhance
defreduce_opacity(im,opacity):
"""Returnsanimagewithreducedopacity."""
assertopacity>=0andopacity<=1
ifim.mode!='RGBA':
im=im.convert('RGBA')
else:
im=im.copy()
alpha=im.split()[3]
alpha=ImageEnhance.Brightness(alpha).enhance(opacity)
im.putalpha(alpha)
returnim
defwatermark(im,mark,position,opacity=1):
"""Addsawatermarktoanimage."""
ifopacity<1:
mark=reduce_opacity(mark,opacity)
ifim.mode!='RGBA':
im=im.convert('RGBA')
#createatransparentlayerthesizeoftheimageanddrawthe
#watermarkinthatlayer.
layer=Image.new('RGBA',im.size,(0,0,0,0))
ifposition=='tile':
foryinrange(0,im.size[1],mark.size[1]):
forxinrange(0,im.size[0],mark.size[0]):
layer.paste(mark,(x,y))
elifposition=='scale':
#scale,butpreservetheaspectratio
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)
#compositethewatermarkwiththelayer
returnImage.composite(layer,im,layer)
deftest():
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程序设计有所帮助。