Pillow:修订间差异

(创建页面,内容为“Pillow是一个Python的图像处理库,PIL(Python Imaging Library)2011年停止更新,随后Pillow分支了PIL并添加了Python 3的支持,现在成为PI…”)
 
无编辑摘要
 
(未显示同一用户的3个中间版本)
第13行: 第13行:
|[https://pillow.readthedocs.io/en/stable/installation.html Pillow 文档:安装]
|[https://pillow.readthedocs.io/en/stable/installation.html Pillow 文档:安装]
}}
}}
==基础知识==
 
==快速入门==
 
===图片格式转换===
<syntaxhighlight lang="python" >
from PIL import Image
 
im = Image.open("test.webp")
print(im.size, im.format)    # 打印图片尺寸,格式
im.show()                    # 显示图片
im.save("test.jpg")
</syntaxhighlight>
{{了解更多
|[https://pillow.readthedocs.io/en/stable/handbook/tutorial.html Pillow 文档:Image类的使用]
}}
 
==Image类==
===生成Image类===
{| class="wikitable"
! 名称
! 描述
! 示例
|-
| [https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.open open()]
|从图像文件生成Image对象  <br /><br /><code>PIL.Image.open(fp, mode='r', formats=None)</code>
| <syntaxhighlight lang="python" >
from PIL import Image
 
im = Image.open("test.jpg")
</syntaxhighlight>
|-
| [https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.new new()]
| 生成一个新的Image对象  <br /><br /><code>PIL.Image.new(mode, size, color=0)</code>
| <code>im_new = Image.new('RGB',(1200,1200), 'white')</code>
|-
| [https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.frombytes frombytes()]
|
|
|}
 
{{了解更多
|[https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image Pillow 文档:The Image Class]
|[https://pillow.readthedocs.io/en/stable/handbook/tutorial.html#more-on-reading-images Pillow 文档:详细了解如何读取图片]
}}
 
===属性===
以下示例使用如下代码:
<syntaxhighlight lang="python" >
from PIL import Image
 
im = Image.open("test.jpg")
print(im.format)
</syntaxhighlight>
{| class="wikitable"
! 名称
! 描述
! 示例
|-
| filename
| 文件名
|
|-
| format
| 文件格式
| <code>im.format</code> 返回'jpg'
|-
| size
|
|
|-
|
|
|
|}
 
{{了解更多
|[https://pillow.readthedocs.io/en/stable/reference/Image.html#image-attributes Pillow 文档:Image属性]
}}
 
===方法===
{| class="wikitable"
! 名称
! 描述
! 示例
|-
| save()
| 保存图片。
|
|-
| crop()
| 裁剪图片。 输入参数4元组,坐标为(左、上、右、 下),其中 (0, 0) 中的 左上角,数值为像素。
| <syntaxhighlight lang="python" >
box = (100, 100, 400, 400)
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>
|-
| resize()
| 调整图片大小。
| <code>im.resize( (200,500) )</code>,调整图片尺寸为200x500。<br />
自定义一个调整大小函数
<syntaxhighlight lang="python" >
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(old_h * max_w / old_w)) )
    else:
        img_new = img.resize( (int(old_w * max_h / old_h), int(max_h)) )
    return img_new
</syntaxhighlight>
|-
|
|
|
|-
|
|
|
|-
| getexif()
|
| 打印照片Exif信息<syntaxhighlight lang="python" >
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))
</syntaxhighlight>
|-
|
|
|
|-
|
|
|
|}
{{了解更多
|[https://pillow.readthedocs.io/en/stable/handbook/tutorial.html * Pillow 文档:教程]
|[https://pillow.readthedocs.io/en/stable/reference/Image.html#the-image-class Pillow API:The Image Class]
}}


==资源==
==资源==

2023年5月8日 (一) 04:06的最新版本

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(old_h * max_w / old_w)) )
    else:
        img_new = img.resize( (int(old_w * max_h / 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


资源

官网

网站