最新公告
  • 欢迎您光临码农资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!加入我们
  • Python图像处理PIL库详解

    Pillow 也叫 PIL,全称为 Python Imaging Library,已经是 Python
    平台事实上的图像处理标准库了。PIL 功能非常强大,并且 API 非常简单易用。

    我们可以使用 pip 来安装 PIL,注意用 pip 安装 PIL时,不能用 pip install PIL,必须用
    pip install pillow 命令来安装。

    使用 PIL 模块的 Image

    用 Image 类的 thumbnail 函数对我们本地磁盘的图形文件进行缩放操作。注意:thumbnail
    函数缩放图片比例必须为大于 0 小于等于
    1,并且函数对图片缩放的高和宽比例必须一致,如果不一致,以缩放比例最大的参数为准。

    from PIL import Image
    
    img = Image.open("d:/test.png")    # 确保 d 盘下存在 test.png 图片文件
    w = img.size[0]  # 图片宽度
    h = img.size[1]  # 图片高度
    img.thumbnail((w * 0.5, h * 0.5))  # 缩放的参数必须大于 0 且 小于等于 1
    img.save("d:/testcopy.png")        # 缩放后另存为 testcopy.png

    我们可以用 Image 类的 resize 函数进对图片进行非等比例缩放。

    from PIL import Image
    
    img = Image.open("d:/test.png")  # 确保 d 盘下存在 test.png 图片文件
    w = img.size[0]  # 图片宽度
    h = img.size[1]  # 图片高度
    img.resize((w * 2, h * 3))       # 缩放的倍数必须为正整数
    img.save("d:/testcopy.png")      # 缩放后另存为 testcopy.png

    使用 PIL 模块的其它常用函数

    PIL 模块功能非常丰富,它不但提供了很多有用的处理图片的类库,还提供了一系列绘图的类库,下面我们使用常用的 PIL
    模块的类库做一个项目开发中常见的需求——生成字母验证码图片。我们生成验证码图片后,存储在项目目录下(文件名为:code.jpg)

    from PIL import Image, ImageDraw, ImageFont, ImageFilter
    import random
    
    # 生成随机大写字母,ascii为 [65, 90],
    def rndChar():
        return chr(random.randint(65, 90))
    
    # 生成填充颜色,返回 RGB 值,每个颜色值在(128, 255)之间
    def rndColor():
        return (random.randint(128, 255), random.randint(128, 255), random.randint(128, 255))
    
    # 生成字体颜色,返回 RGB 值,每个颜色值在(0, 127)之间,在此我只是为了不和背景颜色重叠,大家可以自行设置。
    def rndColor2():
        return (random.randint(0, 127), random.randint(0, 127), random.randint(0, 127))
    
    # 图片大小(存放 5 个随机字母),宽度为:400,高度为:80
    width = 80 * 5
    height = 80
    
    # 黑色背景,RGB值为:(0, 0, 0)
    image = Image.new('RGB', (width, height), (0, 0, 0))
    
    # 创建 Font 对象,设定字体大小为 36
    font = ImageFont.truetype('C:/Windows/Fonts/verdana.ttf', 36)
    
    # 创建Draw对象
    draw = ImageDraw.Draw(image)
    
    # 填充每个像素
    for x in range(width):
        for y in range(height):
            draw.point((x, y), fill=rndColor())
    
    # 输出文字
    for t in range(5):
        draw.text((80 * t + 10, 10), rndChar(), font=font, fill=rndColor2())
    
    # 让验证码图片模糊
    image = image.filter(ImageFilter.BLUR)
    image.save('code.jpg', 'jpeg')

    Python 有大量的功能丰富的第三方模块,我们在使用第三方模块时,可以对某些函数的功能进行猜测,如果猜测的结果不对时,要学会查找第三模块的官方文档来进行学习。

    本节重要知识点

    会使用 PIL 做图片处理。

    会自己查找学习 PIL 其它相关类库。

    想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
    本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
    如有侵权请发送邮件至1943759704@qq.com删除

    码农资源网 » Python图像处理PIL库详解
    • 7会员总数(位)
    • 25846资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 293稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情