zoukankan      html  css  js  c++  java
  • 添加水印

    一 添加文字水印

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

  • 相关阅读:
    龟兔赛跑(动态规划)
    Dividing (多重背包 搜索)
    第k大值01背包问题
    FATE(完全背包)
    01背包 和 完全背包 详解
    放苹果(动态规划)
    max Sum(简单动态规划)
    连连看 优先对列 应用2
    尺取法
    Square(强大的剪枝)
  • 原文地址:https://www.cnblogs.com/Terrypython/p/9939766.html
Copyright © 2011-2022 走看看