添加水印
Posted terrypython
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了添加水印相关的知识,希望对你有一定的参考价值。
一 添加文字水印
from PIL import Image, ImageDraw,ImageFont img = Image.open("D:\\杨幂.jpg").convert(‘RGBA‘) txt=Image.new(‘RGBA‘, img.size, (0,0,0,0)) fnt=ImageFont.truetype("C:\\Windows\\Fonts\\FZSTK.ttf",40) d=ImageDraw.Draw(txt) d.text((txt.size[0]-80,txt.size[1]-30), "杨幂",fill = (255,255,255,255),font = fnt) out=Image.alpha_composite(img, txt) out.show()
结果如下图所示:
关于上述程序有几点需要说明一下:
(1)txt=Image.new(‘RGBA‘, img.size, (0,0,0,0))
有两种用法,如下所示:
- Image.new(mode, size) => image
- Image.new(mode, size, color) => image
以指定的模式和大小创建一个新图像。大小以2元元组的形式给出。给colour赋单个值,表示要创建单波段图像,元组表示创建多波段图像(每个波段一个值)。如果忽略colour参数,图像将以黑色填充。如果colour设为None,图像不会被初始化。
(2)fnt=ImageFont.truetype("C:\\Windows\\Fonts\\FZSTK.ttf",40)
有两种用法,如下所示:
- ImageFont.truetype(file,size) ? Font instance(字体对象)
- ImageFont.truetype(file,size, encoding=value) ? Font instance(字体对象)
其中:
- file是TrueType或者OpenType字体文件,如果需要显示中文,必须指定专门有中文字体的文件,否则只会显示出方框。
- size是指字体的大小
- encoding是指使用指定的编码方式创建一个字体对象,通常的编码方式有“unic”(Unicode),“symb”(Microsoft Symbol),“ADOB”(Adobe Standard),“ADBE”(Adobe Expert)和“armn”(Apple Roman)。
(3)d=ImageDraw.Draw(txt)
用法:ImageDraw.Draw(img)? Draw instance(绘图对象)
含义:创建一个可以在给定图像上绘图的对象。
(4)d.text((txt.size[0]-80,txt.size[1]-30), "杨幂",fill = (255,255,255,255),font = fnt)
ImageDraw.Draw.text():文字的绘制,第一个参数指定绘制的起始点(文本的左上角所在位置),第二个参数指定文本内容,第三个参数指定文本的颜色,第四个参数指定字体(通过ImageFont类来定义)。
除了绘制文字,还可以绘制直线,矩形等,总结如下:
- ImageDraw.Draw.line():直线的绘制,第一个参数指定的是直线的端点坐标,形式为(x0, y0, x1, y1),第二个参数指定直线的颜色;
- ImageDraw.Draw.rectangle():矩形绘制,第一个参数指定矩形的对角线顶点(左上和右下),形式为(x0, y0, x1, y1),第二个指定填充颜色,第三个参数指定边界颜色;
- ImageDraw.Draw.arc():(椭)圆弧的绘制,第一个参数指定弧所在椭圆的外切矩形,第二、三两个参数分别是弧的起始和终止角度, 第四个参数是填充颜色,第五个参数是线条颜色;
- ImageDraw.Draw.chord():弦的绘制,和弧类似,只是将弧的起始和终止点通过直线连接起来;
- ImageDraw.Draw.pieslice():圆饼图的绘制,和弧与弦类似,只是分别将起始和终止点与所在(椭)圆中心相连;
- ImageDraw.Draw.ellipse():椭圆的绘制,第一个参数指定椭圆的外切矩形, 第二、三两个参数分别指定填充颜色和线条颜色,当外切矩形是正方形时,椭圆即为圆;
- ImageDraw.Draw.polygon():绘制多边形,第一个参数为多边形的端点,形式为(x0, y0, x1, y1, x2, y2,……),第二、三两个参数分别指定填充颜色和线条颜色;
(5)out=Image.alpha_composite(img, txt)
上述是将两个图像进行融合的操作,类似的还有:
- Image.blend(im1,im2,alpha)
- Image.composite(im1,im2,mask)
以上3个函数都是将两个图像进行融合,需要注意的是,被融合的两个图像的mode和size都要相同。这里说明一下,alpha是透明度,mask是一个为“1”,“L”或“RGBA”,size和im1,im2相同的图片。
二 添加小图片水印
from PIL import Image
img = Image.open("D:\\杨幂.jpg")
mark=Image.open("D:\\太阳花.jpg")
layer=Image.new(‘RGBA‘, img.size, (0,0,0,0))
layer.paste(mark, (img.size[0]-160,img.size[1]-225))
out=Image.composite(layer,img,layer)
out.show()
结果如下图所示:
有一处需要说明:
- layer.paste(mark, (img.size[0]-160,img.size[1]-225))
layer.paste函数的参数为(图片,(粘贴的起始点的横坐标,粘贴的起始点的纵坐标))
含义:将参数中的图片粘贴到layer上边。
以上是关于添加水印的主要内容,如果未能解决你的问题,请参考以下文章