码迷,mamicode.com
首页 > 其他好文 > 详细

添加水印

时间:2018-11-10 20:04:46      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:五个   两种   chord   soft   文件   绘图   内容   lin   edr   

一 添加文字水印

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上边。

添加水印

标签:五个   两种   chord   soft   文件   绘图   内容   lin   edr   

原文地址:https://www.cnblogs.com/Terrypython/p/9939766.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!