使用python的pillow库进行图片圆角、合成处理

使用python的pillow库进行图片圆角、合成处理

-----------------------实用主义的非典型IT搬运工-----------------------

在做一个生成报表并发送企业微信图文消息功能的时候,需要进行图片的处理,于是找到了pillow模块,整理一下该模块的用法,以备方便使用:

pillow

搜到的被转发最多的一篇介绍是《python pillow模块使用方法详解》,写得比较详细,可以快速了解和上手,不过版本有些老了:

Pillow是PIL的一个派生分支,但如今已经发展成为比PIL本身更具活力的图像处理库。pillow可以说已经取代了PIL,将其封装成python的库(pip即可安装),且支持python2和python3,目前最新版本是3.0.0。

现在(2020年6月)pillow最新版本早就不是3.0.0了,从pillow的Github仓库可以看到:

https://github.com/python-pillow/Pillow 最新版本是7.1.2

使用python的pillow库进行图片圆角、合成处理_第1张图片

文档地址为:https://pillow.readthedocs.io/en/stable/index.html

pillow官网:https://python-pillow.org/ 欢迎语如下:

Welcome

This is the home of Pillow, the friendly PIL fork. PIL is the Python Imaging Library. If you have ever worried or wondered about the future of PIL, please stop. We’re here to save the day.

意思是说,如果你不必对python的PIL图片库担心,我们就是来拯救世界的!标准的美国英雄主义啊,哈哈哈!

使用python的pillow库进行图片圆角、合成处理_第2张图片

pillow的安装

pip install pillow  # 如果安装不了,可以选择从国内镜像安装(下边的语句)
pip install -i https://pypi.douban.com/simple pillow

不同版对于Python环境的支持情况下,可以看到python3.7以上需要Pillow5.2以上版本:

使用python的pillow库进行图片圆角、合成处理_第3张图片

Pillow的功能模块

使用python的pillow库进行图片圆角、合成处理_第4张图片

最常用的,也是最基本模块就是第一个Image模块,,图片的旋转、裁切、缩放、合并、更改类型、更改模式等操作,引用这个模块就可以实现了。

from PIL import Image

使用python的pillow库进行图片圆角、合成处理_第5张图片

Image对象的方法和属性如下:文档很详细,如果只是为了应用,先了解一下总体概况,然后随用随查就行,用得多了就记住了。

使用python的pillow库进行图片圆角、合成处理_第6张图片

下面一个简单的示例,把一个图片变成圆角,然后粘贴进一个背景图中:

# -*- coding: utf-8 -*-
"""
Created on Fri Jun 12 09:11:30 2020
module pillow
@author: z-tig wx:aladdin2008
"""

from PIL import Image,ImageDraw
def circle_corner(img, radii):  #把原图片变成圆角,这个函数是从网上找的,原址 https://www.pyget.cn/p/185266
    """
    圆角处理
    :param img: 源图象。
    :param radii: 半径,如:30。
    :return: 返回一个圆角处理后的图象。
    """

    # 画圆(用于分离4个角)
    circle = Image.new('L', (radii * 2, radii * 2), 0)  # 创建一个黑色背景的画布
    draw = ImageDraw.Draw(circle)
    draw.ellipse((0, 0, radii * 2, radii * 2), fill=255)  # 画白色圆形

    # 原图
    img = img.convert("RGBA")
    w, h = img.size

    # 画4个角(将整圆分离为4个部分)
    alpha = Image.new('L', img.size, 255)
    alpha.paste(circle.crop((0, 0, radii, radii)), (0, 0))  # 左上角
    alpha.paste(circle.crop((radii, 0, radii * 2, radii)), (w - radii, 0))  # 右上角
    alpha.paste(circle.crop((radii, radii, radii * 2, radii * 2)), (w - radii, h - radii))  # 右下角
    alpha.paste(circle.crop((0, radii, radii, radii * 2)), (0, h - radii))  # 左下角
    # alpha.show()

    img.putalpha(alpha)  # 白色区域透明可见,黑色区域不可见
    return img

if __name__ == '__main__':
    imgbg=Image.open('./images/reportbg.png')  # 打开背景图片
    imgfr=Image.open('./images/test.jpg') # 打开前景图片
    imgfr=circle_corner(imgfr,radii=20) # 把前景图改成圆角矩形
    rp_img_x = (imgbg.size[0]-imgfr.size[0])//2  # 图片宽度计算,是为了让前景图片居中
   	imgbg.paste(imgfr,(rp_img_x,155)) # 把前景图粘进背景图中
	
    imgbg.show()  # 显示结果图片
    bg_img.save('resultimg.png') # 保存图片
    

最后结果图片

使用python的pillow库进行图片圆角、合成处理_第7张图片

你可能感兴趣的:(IT办公应用,python)