Pillow:修订间差异

无编辑摘要
无编辑摘要
第107行: 第107行:
box = (100, 100, 400, 400)
box = (100, 100, 400, 400)
region = im.crop(box)
region = im.crop(box)
</syntaxhighlight>
先使用rembg抠图,再裁剪掉多余的边。透明度通道0为透明,255为不透明,计算分别行和列,不为0的起始和终止坐标即可切割。
<syntaxhighlight lang="python" >
import  numpy as np
from PIL import Image
from rembg import remove
im = Image.open('3.jpg')
# 抠图
im = remove(im, alpha_matting=True, alpha_matting_foreground_threshold=120)
r,g,b,alpha = im.split()
alpha_arr = np.array(alpha)  #透明度通道数组
x_start = np.nonzero(alpha_arr.sum(axis=0))[0][0]
x_end = np.nonzero(alpha_arr.sum(axis=0))[0][-1]
y_start = np.nonzero(alpha_arr.sum(axis=1))[0][0]
y_end = np.nonzero(alpha_arr.sum(axis=1))[0][-1]   
im.crop((x_start, y_start, x_end, y_end))
</syntaxhighlight>
</syntaxhighlight>
|-
|-

2023年5月5日 (五) 07:44的版本

Pillow是一个Python的图像处理库,PIL(Python Imaging Library)2011年停止更新,随后Pillow分支了PIL并添加了Python 3的支持,现在成为PIL的替代品。

简介

时间轴

安装

使用pip安装:

pip install --upgrade pip
pip install --upgrade Pillow

了解更多 >> Pillow 文档:安装


快速入门

图片格式转换

from PIL import Image

im = Image.open("test.webp")
print(im.size, im.format)     # 打印图片尺寸,格式
im.show()                     # 显示图片
im.save("test.jpg")

了解更多 >> Pillow 文档:Image类的使用


Image类

生成Image类

名称 描述 示例
open() 从图像文件生成Image对象

PIL.Image.open(fp, mode='r', formats=None)
from PIL import Image

im = Image.open("test.jpg")
new() 生成一个新的Image对象

PIL.Image.new(mode, size, color=0)
im_new = Image.new('RGB',(1200,1200), 'white')
frombytes()

了解更多 >> Pillow 文档:The Image Class Pillow 文档:详细了解如何读取图片


属性

以下示例使用如下代码:

from PIL import Image

im = Image.open("test.jpg")
print(im.format)
名称 描述 示例
filename 文件名
format 文件格式 im.format 返回'jpg'
size

了解更多 >> Pillow 文档:Image属性


方法

名称 描述 示例
save() 保存图片。
crop() 裁剪图片。 输入参数4元组,坐标为(左、上、右、 下),其中 (0, 0) 中的 左上角,数值为像素。
box = (100, 100, 400, 400)
region = im.crop(box)

先使用rembg抠图,再裁剪掉多余的边。透明度通道0为透明,255为不透明,计算分别行和列,不为0的起始和终止坐标即可切割。

import  numpy as np
from PIL import Image
from rembg import remove

im = Image.open('3.jpg')
# 抠图
im = remove(im, alpha_matting=True, alpha_matting_foreground_threshold=120)

r,g,b,alpha = im.split()
alpha_arr = np.array(alpha)  #透明度通道数组
x_start = np.nonzero(alpha_arr.sum(axis=0))[0][0]
x_end = np.nonzero(alpha_arr.sum(axis=0))[0][-1]
y_start = np.nonzero(alpha_arr.sum(axis=1))[0][0]
y_end = np.nonzero(alpha_arr.sum(axis=1))[0][-1]    

im.crop((x_start, y_start, x_end, y_end))
resize() 调整图片大小。 im.resize( (200,500) ),调整图片尺寸为200x500。

自定义一个调整大小函数

def resize_max(img, max_size=(500,500)):
    # 调整图片,一边等比缩放,不会变形。
    max_w, max_h = max_size
    old_w, old_h = img.size
    if old_w/old_h > max_w/max_h:
        img_new = img.resize( (int(max_w), int(max_h*old_h/old_w)) )
    else:
        img_new = img.resize( (int(max_w*old_w/old_h), int(max_h)) )
    return img_new
getexif() 打印照片Exif信息
from PIL import Image
from PIL.ExifTags import TAGS

img = Image.open(r'test.JPG')
exif = img.getexif()

for k, v in exif.items():
    print('{}: {}'.format(TAGS[k], v))

了解更多 >> * Pillow 文档:教程 Pillow API:The Image Class


资源

官网

网站