Pillow图像处理笔记
Glider 十月 31, 2019前言
自从有了博客,需要更新背景图片和添加新图,发现图片需要压缩,亮度调整等一系列操作才能更适合网页。于是捡起pillow,写了一个批处理py脚本。这里记录一下相关用法,以后可能补充。
中文文档 这个好像不完整……大家还是看原版吧……
可用的压缩以及亮度调整代码
import os
from PIL import Image,ImageEnhance,ImageStat
origin_path = 'pic/origin/'
edited_path = 'pic/edited/'
def get_FileSize(filePath):
fsize = os.path.getsize(filePath)
fsize = fsize/float(1024*1024)
return round(fsize,5)
def get_name_path(origin_path = origin_path):
path_list = {}
for pic in os.listdir(origin_path):
pic_name = os.path.splitext(pic)[0]
path_list[pic_name] = origin_path+ str(pic)
return path_list
def change_dark(pic_content): #传入待定
bright_origin = ImageStat.Stat(pic_content.convert('L')).mean[0]
print(bright_origin)
brightness = 50 / bright_origin
dark_pic = ImageEnhance.Brightness(pic_content).enhance(brightness)
return dark_pic
def change_small(pic_content):#传入待定
pass
path_list = get_name_path()
print(path_list)
for pic_name in path_list:
print(pic_name,path_list[pic_name])
pic = Image.open(path_list[pic_name]).convert('RGB')
print(get_FileSize(path_list[pic_name]))
# pic.show()
pic = change_dark(pic)
save_path = edited_path + pic_name +'.jpg'
pic.save(save_path,quality=80)
print(get_FileSize(save_path) )
pic = Image.open(save_path)
# pic.show()
用法笔记
PIL中所涉及的基本概念有如下几个:通道(bands)、模式(mode)、尺寸(size)、坐标系统(coordinate system)、调色板(palette)、信息(info)和滤波器(filters)。
通道
>>>from PIL import Image
>>> im= Image.open('1.jpg')
>>>im.getbands()
('R', 'G', 'B')
RGB到灰度图转换公式:Y = 0.299 R + 0.587 G + 0.114 B
模式
图像的模式定义了图像的类型和像素的位宽。当前支持如下模式:
1:1位像素,表示黑和白,但是存储的时候每个像素存储为8bit。
L:8位像素,表示黑和白。
P:8位像素,使用调色板映射到其他模式。
RGB:3x8位像素,为真彩色。
RGBA:4x8位像素,有透明通道的真彩色。
CMYK:4x8位像素,颜色分离。
YCbCr:3x8位像素,彩色视频格式。
I:32位整型像素。
F:32位浮点型像素。
>>> im.mode
'RGB'
>>> im = im.convert("I")
>>> im.mode
'I'
尺寸
>>>im.size
(800, 450)
坐标
PIL使用笛卡尔像素坐标系统,坐标(0,0)位于左上角。注意:坐标值表示像素的角;位于坐标(0,0)处的像素的中心实际上位于(0.5,0.5)。
高阶操作
数据增强模块ImageEnhance
- 亮度
enh_bri = ImageEnhance.Brightness(image)
brightness = 1.5 #这个是变亮,0.8就是变暗
image_brightened1 = enh_bri.enhance(brightness)
- 色彩饱和度:彩度除以明度,指色彩的鲜艳程度,也称色彩的纯度;
enh_col = ImageEnhance.Color(image)
color = 1.5 #增强,0.8减弱
image_colored1 = enh_col.enhance(color)
- 锐度:是反映图像平面清晰度和图像边缘锐利程度的一个指标。
enh_sha = ImageEnhance.Sharpness(image)
sharpness = 3.0
image_sharped1 = enh_sha.enhance(sharpness)
- 对比度
enh_con = ImageEnhance.Contrast(image)
contrast = 1.5
image_contrasted1 = enh_con.enhance(contrast)
数据统计模块ImageStat
ImageStat.Stat(image, mask)⇒ Stat instance
含义:计算给定图像的统计值。如果变量mask被赋值,将只针对变量mask所定义的区域进行统计。
>>> stat =ImageStat.Stat(im)
>>> stat.extrema #获取图像中每个通道的最大值和最小值。
[(2, 255), (0, 255), (0, 255)]
>>> stat.count #获取图像中每个通道的像素个数。
[786432, 786432,786432]
>>> stat.sum #每个通道求和
[90912466.0,75765120.0, 59027727.0]
>>>stat.sum2 #每个通道求平方和
[14449895138.0,12289898764.0, 9141884969.0]
>>>stat.mean #求平均
[115.60117848714192,96.34033203125, 75.05763626098633]
>>>stat.median #中位数
[119, 80, 40]
>>>stat.rms #均方根值
[135.55069835243268,125.00965724006934, 107.81701101697355]
>>>stat.var #方差
[5010.359356216148,6345.954827388127, 5990.859103547667]
>>>stat.stddev #标准差
[70.78389192617306,79.66150153862358, 77.40064020114863]
结语
鉴于许多猛男不会ps~~审美猛男化~~,就不需要更高阶的操作了。以后如有需要就再更新,美滋滋。