python基础模块学习笔记——图像处理库pillow

Anbinx 2019-08-03 PM 186℃ 0条

pillow是PIL(Python Image Library)的一个分支(Fork),可以非常方便地对图像进行剪裁、变换、添加滤镜、生成缩略图等操作,也可以进行一些简单的绘图操作。pillow的功能非常强大,详细的说明可以参阅文档。

附上英文文档

下面用一个实例简单展示下pillow的基本使用方法:

把任意形状的图像剪裁成正方形,并在图像右上角生成类似微信消息提醒气泡的图案和文字

我的实现代码如下:

# -*- coding: utf-8 -*-

from PIL import Image, ImageDraw, ImageFont
import os
import glob


def cutImage(size=512):
    for infile in glob.glob('*.png'):
        f, e = os.path.splitext(infile)
        im = Image.open(infile).convert('RGBA')
        x, y = im.size
        l = min(im.size[0], im.size[1])
        x, y = x//2 - l//2, y//2 - l//2
        #print(x, y)
        im = im.crop((x, y, x + l, y + l))
        #im.save(f + '_cut.png')
        im.thumbnail((size, size), Image.ANTIALIAS)
        im.save(f + '.thumbnail', 'PNG')


def drawCircle(zoom_In=4, count=99):
    for infile in glob.glob('*.thumbnail'):
        f, e = os.path.splitext(infile)
        im = Image.open(infile).convert('RGBA')
        x0, y0 = im.size
        r = im.size[0] // zoom_In
        ext_im = im.crop((-r//2, -r//2, im.size[0] + r//2, im.size[1] + r//2))
        x, y = ext_im.size[0] - r, 0
        draw = ImageDraw.Draw(ext_im)
        draw.pieslice([x, y, x + r,
                       y + r], 0, 360, fill='red')
        if count > 99:
            count = 99
        wc = len(str(count))
        if wc == 2:
            offset = r // 16 * 3
        else:
            offset = r // 3
        fnt = ImageFont.truetype('DROIDSANSCHINESE.ttf', r // 4 * 3)
        draw.text((x + offset, y), str(count),
                  fill='white', font=fnt, align='center')
        ext_im.save(f + '_drawed.png')
        os.remove(infile)


if __name__ == '__main__':
    cutImage()
    drawCircle()

上面的代码使用到了pillow中的三个模块ImageImageDrawImageFont

Image模块包含了对图像的基本操作,包括打开图像文件,返回Image对象,以及保存图像文件,剪裁图像,生成缩略图等操作,这些示例中均有所体现。

ImageDraw模块主要包含了绘图的方法,如实例中使用pieslice函数绘制了红色填充的圆形图案。

ImageFont模块主要用在图像上覆盖文字,支持TrueType,和OpenType两种字体。

标签: pillow, python, 原创

非特殊说明,本博所有文章均为博主原创。

评论呢


captcha
请输入验证码