Pillow - ImageDraw 模块

  • 简述

    ‘ImageDraw’模块为 Image Object 提供简单的 2D 图形支持。通常,我们使用此模块来创建新图像、注释或修饰现有图像并动态生成图形以供 Web 使用。
    图形命令支持形状的绘制和文本的注释。
    • 一幅图像可以经过深思熟虑,成为一个二维像素阵列(图片元素)。像素是支持的最小颜色点。
    • ImageDraw 使用的二维坐标系的原点在upper left corner的图像。
    • 我们使用的枕头配色方案是 RGB。颜色 RGB 表示和支持由模块提供ImageColor.
    • 位图、OpenType 或 TrueType 是文本注释可接受的字体。
    • 大多数绘图命令可能需要一个边界框参数,该参数指定图像上要应用该命令的区域。
    • 一系列坐标可以表示为 [ (x0, y0), (x1, y1),…(xn, yn)]。
    • 对于某些绘图命令,我们需要角度值。

    例子

    以下 python 示例在给定图像上画一条线 -
    
    #Import required libraries
    import sys
    from PIL import Image, ImageDraw
    #Create Image object
    im = Image.open("images/logo.jpg")
    #Draw line
    draw = ImageDraw.Draw(im)
    draw.line((0, 0) + im.size, fill=128)
    draw.line((0, im.size[1], im.size[0], 0), fill=128)
    #Show image
    im.show()
    

    输出

    如果将上述程序保存为 Example.py 并执行,它会在图像上画一条线并使用标准 PNG 显示实用程序显示它
  • Canvas

    • ImageDraw 是 Image 的 Pillow 可绘制表面(即画布)。
    • ImageDraw.Draw(img) 返回 Image 参数 img 的可绘制画布表示。画布的背景是“img”图像。

    例子

    以下 python 示例在给定图像上绘制文本 -
    
    #Import required modules from Pillow package
    from PIL import Image, ImageDraw, ImageFont
    # get an image
    base = Image.open('images/boy.jpg').convert('RGBA')
    # make a blank image for the text, initialized to transparent text color
    txt = Image.new('RGBA', base.size, (255,255,255,0))
    # get a font
    fnt = ImageFont.truetype('E:/PythonPillow/Fonts/Pacifico.ttf', 40)
    # get a drawing context
    d = ImageDraw.Draw(txt)
    # draw text, half opacity
    d.text((14,14), "Tutorials", font=fnt, fill=(255,255,255,128))
    # draw text, full opacity
    d.text((14,60), "Point", font=fnt, fill=(255,255,255,255))
    out = Image.alpha_composite(base, txt)
    #Show image
    out.show()
    

    输出

    Canvas
  • 使用“ImageDraw”模块绘制形状

    ImageDraw 模块允许我们通过首先使用您要使用的图像创建绘图对象然后应用它来创建不同的形状。我们可以使用“ImageDraw”模块绘制的一些常见形状如下 -

    线

    以下是使用 python 枕头画线的语法 -
    
    draw.line(xy, fill=None, width=0)
    
    line()方法从边界框 xy 和画布的左上角到右下角绘制一条线。使用颜色填充填充线条。默认值 None 和 0 分别用于可选的参数 fill 和 width。

    例子

    
    from PIL import Image, ImageDraw
    img = Image.new('RGB', (500, 300), (125, 125, 125))
    draw = ImageDraw.Draw(img)
    draw.line((200, 100, 300, 200), fill=(0, 0, 0), width=10)
    img.show()
    

    输出

    线

    以下是使用 python 枕头绘制椭圆的语法 -
    
    draw.ellipse(xy, fill=None, outline=None)
    
    ellipse()方法在绘制时绘制由边界框 xy 包围的椭圆。使用颜色填充和颜色轮廓中的周长填充形状。None 的默认值用于可选的参数 fill 和 width。

    例子

    
    from PIL import Image, ImageDraw
    img = Image.new('RGB', (500, 300), (125, 125, 125))
    draw = ImageDraw.Draw(img)
    draw.ellipse((200, 125, 300, 200), fill=(255, 0, 0), outline=(0, 0, 0))
    img.show()
    

    输出

    椭圆

    长方形

    以下是使用 python 枕头绘制矩形的语法 -
    
    draw.rectangle(xy, fill=None, outline=None)
    
    rectangle()方法在绘制时绘制给定边界框 xy 的矩形。使用颜色填充和颜色轮廓中的周长填充形状。None 的默认值用于可选的参数 fill 和 width。
    
    from PIL import Image, ImageDraw
    img = Image.new('RGB', (500, 300), (125, 125, 125))
    draw = ImageDraw.Draw(img)
    draw.rectangle(
       (200, 125, 300, 200),
       fill=(255, 0, 0),
       outline=(0, 0, 0))
    img.show()
    

    输出

    长方形

    多边形

    以下是使用 python 枕头绘制矩形的语法 -
    
    draw.polygon(seq, fill=None, outline=None)
    
    polygon()方法绘制一个多边形,用直线连接坐标序列位置 seq on draw。seq 中的第一个和最后一个坐标也由一条直线连接。使用颜色填充和颜色轮廓中的周长填充形状。参数 fill 和 outline 是可选的,默认值为 None。
    
    from PIL import Image, ImageDraw
    img = Image.new('RGB', (500, 300), (125, 125, 125))
    draw = ImageDraw.Draw(img)
    draw.polygon(
       ((200, 200), (300, 100), (250, 50)),
       fill=(255, 0, 0),
       outline=(0, 0, 0))
    img.show()
    

    输出

    多边形