【python第三方库】pillow常用方法介绍

参考链接: https://www.cnblogs.com/gdjlc/p/11444132.html
https://blog.csdn.net/h18208975507/article/details/103271485
仅作学习使用~

概述

PIL(Python Imaging Library)是Python一个强大方便的图像处理库,只支持到Python2.7。
Pillow是PIL的一个派生分支,在Python3中用Pillow代替PIL。
Pillow官网: https://pillow.readthedocs.io/en/latest/handbook/index.html

安装它很简单

pip install pillow

使用方式:

#python2 
import Image 
#python3(因为是派生的PIL库,所以要导入PIL中的Image) 
from PIL import Image

PIL最重要的类是 Image你可以从文件加载图像,或者处理其他图像, 或者从 scratch 创建。

常用方法

open()

要从文件加载图像 通过 Image 模块的 open() 函数

from PIL import Image
 
im = Image.open('f117.jpg')
# 这句话是解决pycharm没有代码提示的
assert isinstance(im, Image.Image)
# 显示图片
im.show()

format,size,mode

format属性定义了图像的格式,如果图像不是从文件打开的,那么该属性值为None;size属性是一个tuple,表示图像的宽和高(单位为像素);mode属性为表示图像的模式,常用的模式为:L为灰度图,RGB为真彩色,CMYK为pre-press图像。如果文件不能打开,则抛出IOError异常。

print(im)
print(f"{im.format}+++{im.size}+++{im.mode}")
 
#结果:
# <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1024x680 at 0x4EC520>
# JPEG+++(1024, 680)+++RGB

save()

保存图片

im.save('you path')

convert()

convert() 是图像实例对象的一个方法,接受一个 mode 参数,用以指定一种色彩模式,mode 的取值可以是如下几种:

·1(1位像素,黑白,存储1像素/字节)

·L(8位像素,黑白)

·P(8位像素,使用调色板映射到任何其他模式)

·RGB (3x8位像素,原色)

·RGBA (4x8位像素,带透明蒙版的真实颜色)

·CMYK (4x8位像素,分色)

·YCbCr (3x8位像素,彩色视频格式)

·I(32位有符号整数像素)

·F(32位浮点像素)
bw = im.convert('L')
bw.save('tt.jpg')

resize()

调整图片大小

im.resize((w,h))

rotate()

图片旋转45度

im.rotate(45)

filter()

ImageFilter和ImageEnhance两个类提供了图片的过滤和增强

from PIL import Image, ImageFilter 
im = Image.open(1.png’) 
# 高斯模糊 
im.filter(ImageFilter.GaussianBlur) 
# 普通模糊 
im.filter(ImageFilter.BLUR) 
# 边缘增强 
im.filter(ImageFilter.EDGE_ENHANCE) 
# 找到边缘 
im.filter(ImageFilter.FIND_EDGES) 
# 浮雕 
im.filter(ImageFilter.EMBOSS) 
# 轮廓 
im.filter(ImageFilter.CONTOUR) 
# 锐化 
im.filter(ImageFilter.SHARPEN) 
# 平滑 
im.filter(ImageFilter.SMOOTH) 
# 细节 
im.filter(ImageFilter.DETAIL)
from PIL import Image,ImageEnhance
 
im = Image.open('tt.png')
# 这句话是解决pycharm没有代码提示的
assert isinstance(im, Image.Image)
print(im)
 
#亮度增强 
epr = ImageEnhance.Brightness(im)
a = epr.enhance(1.5)
a.show()
#色度增强
epr2 = ImageEnhance.Color(im)
a2 = epr2.enhance(1.5)
a2.show()
#对比度增强
epr3 = ImageEnhance.Contrast(im)
a3 = epr3.enhance(1.5)
a3.show()
#锐度增强
epr4 = ImageEnhance.Sharpness(im)
a4 = epr4.enhance(2)
a4.show()

查看图像直方图

im.histogram()

屏幕截图

im1 = ImageGrab.grab()#不带参数表示全屏幕截图
im2 = ImageGrab.grab([0, 0, 200, 50])#截取屏幕指定区域的图像 
im3 = ImageGrab.grab((0, 0, 200, 50))#截取屏幕指定区域的图像 
im1.save('xxxxxx1.png')
im2.save('xxxxxx2.png')
im3.save('xxxxxx3.png')

图像裁剪与粘贴

box = (120, 194, 220, 294) #定义裁剪区域
region = im.crop(box) #裁剪
region = region.transpose(Image.ROTATE_180)
im.paste(region, box) #粘贴

示例

from PIL import Image, ImageFilter, ImageGrab, ImageDraw, ImageFont, ImageEnhance
# pillow里接收的图像尺寸都是 (w,h)的形式

# 创建图片 w:800, h:600, 蓝色
imNew = Image.new('RGB', (800, 600), (0, 0, 255)) #(model, size, color) color不赋值,默认为0 黑色
#imNew.show()

# 抓取屏幕
imGrab = ImageGrab.grab()
imGrab.save('grab_screen.jpg', 'jpeg')

# 打开图片
im = Image.open('E:\\mypic\\11.jpg')
# 判断图片打开是否正确
assert isinstance(im, Image.Image)
#im.show()
print(im) # <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=720x505 at 0x167A7AB1408>
w, h = im.size
print(f"图片宽高:{w} * {h}")

# 复制图片
im1 = im.copy()
im2 = im.copy()
im3 = im.copy()
im4 = im.copy()
im5 = im.copy()
im6 = im.copy()
im7 = im.copy()

# 图像直方图(统计像素个数)
hist = im.histogram()
print(hist.__len__()) # 768 三通道(256*3)

# 缩略图(图片不会被拉伸,只能缩小)
im.thumbnail((w//2, h//2)) #注意宽高必须以元组/list 这种可迭代的形式传入
im.save("缩略图.jpg", 'jpeg')

# 缩放(图片可能会被拉伸,可缩小也可放大)
im1 = im1.resize((w//2, h//2))
im1.save("缩放图.jpg", "jpeg")

# 模糊图片
im2 = im2.filter(ImageFilter.BLUR)
im2.save("模糊_blur.jpg", "jpeg")

# 旋转图片,逆时针转45度,加负号"-“是顺时针
im3 = im3.rotate(45)
im3.save("逆时针rotate45.jpg", "jpeg")

# 图片转换:左右转换 FLIP_LEFT_RIGHT,上下转换 FLIP_TOP_BOTTOM
im4 = im4.transpose(Image.FLIP_LEFT_RIGHT)
im4.save("左右转换.jpg", "jpeg")

# 图片裁剪
crop_box = (200,200, 400,400) # 4元组表示坐标位置:左、上、右、下
im5 = im5.crop(crop_box)
im5.save("裁剪图.jpg", "jpeg")

# 图片上添加文字
draw = ImageDraw.Draw(im6)
#truetype设置字体、文字大小
#stxingka.ttf华文行楷 simkai.ttf 楷体 simli.ttf 隶书
font = ImageFont.truetype("C:\\WINDOWS\\Fonts\\stxingka.ttf", 20)
draw.text((50,50), ('狂风绝息斩!\nhaski!'), fill='#0000ff', font=font)
im6.save("添加文字.jpg", 'jpeg')

# 图片上添加图片(粘贴图片)
imTmp = Image.open("E:\\mypic\\22.png")
imTmp = imTmp.resize((100,100))
im7.paste(imTmp, (20,20)) #第2个参数为 粘贴位置的左上角点
im7.save('图片粘贴.jpg', 'jpeg')

# 图片横向拼接:拼接上面的im6,im7()两张一样大
im6Width, im6Height = im6.size
imHorizontal = Image.new('RGB', (2*im6Width, im6Height))
imHorizontal.paste(im6, (0,0)) # 从(0,0)处开始粘贴
imHorizontal.paste(im7, (im6Width, 0))
imHorizontal.save("水平拼接图.jpg", 'jpeg')

# 图片竖向拼接
imVertical = Image.new('RGB', (im6Width, im6Height*2))
imVertical.paste(im6, (0,0))
imVertical.paste(im7, (0, im6Height))
imVertical.save("竖直拼接.jpg", "jpeg")

imFilter = Image.new('RGB', (w*2, h*2))
# 边缘增强
imTmp = im.filter(ImageFilter.EDGE_ENHANCE)
# 找到边缘
imTmp1 = im.filter(ImageFilter.FIND_EDGES)
# 细节
imTmp2 = im.filter(ImageFilter.DETAIL)
# 色度增强
epr = ImageEnhance.Color(im)
imTmp3 = epr.enhance(1.5)

imFilter.paste(imTmp, (0, 0))
imFilter.paste(imTmp1, (w, 0))
imFilter.paste(imTmp2, (0, h))
imFilter.paste(imTmp3, (w, h))
imFilter.save("滤波器&增强.jpg", "jpeg")
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值