python的图像处理模块pillow

本文详细介绍了Python的PIL库,包括导入、打开、显示、保存图片,以及转换、裁剪、滤镜、合成等图像操作。讲解了如Image.open(), Image.show(), Image.save(), Image.filter()等核心方法,并探讨了图像旋转、翻转、透明度处理等高级功能,是学习PIL库进行图像处理的全面教程。
摘要由CSDN通过智能技术生成

pip install pillow
一般导入 PIL.Image

from PIL import Image 导入模块
	不能使用 from PIL import *
im=Image.open('图片文件路径')  开启文件 返回 图片对象
im.show()  显示图片   使用系统默认程序打开图片
im.save('导出文件名称')
    format  默认为 导入文件名称中的后缀名
         可以手动设置 按照指定格式保存
    quality 用来设置保存图片的质量
        95 最佳
        1  最差
        75 默认
im.format   这个变量保存了 im对象 保存的图片的格式      字符串类型
im.mode     这个变量保存了 im对象 保存的图片的像素格式  字符串类型
    1      1位像素 黑白 
    L      8位像素 黑白
    P      8位像素 可以使用调色板映射到其他模式
    RGB    3*8位像素 真彩
    RGBA   4*8位像素 真彩+透明通道
    CMYK   4*8位像素 颜色隔离
    YCbCr  3*8位像素 彩色视频格式
    I      32位整型像素
    F      32位浮点型像素
im.size     这个变量保存了 im对象 保存的图片的大小信息 元组类型
im.convert(像素格式)  返回新的图片对象
    当像素格式为'P'时
        Dither  控制颜色抖动  默认为 FLOYDSTEINBERG 
                        不启用设置为 NONE 
        Palette 控制调色板的产生 默认为 WEB 216色的web palette
                优化调色板需设置为 ADAPTIVE
        Colors  当Palette 为 ADAPTIVE 时控制颜色数量 默认为 256 最大值
    当RGB RGBA 转换为 L 或 L转换为 RGB RGBA 时
        可以使用元组 a=(0.1,0.2,0.3,0.4)
           im.convert('L',a)
            默认的转换算法为 L = R * 299/1000 + G * 587/1000+ B * 114/1000
             使用这种方式之后 L= R*a[0]+G*a[1]+B*a[2]
               RGBA是 L=R*a[0]+G*a[1]+B*a[2]+A*a[3]
im.info  保存了图片的 相关信息 为字典类型
Image.new(像素格式,大小)
    大小为元组类型
    第三个参数为可选参数 意义为 生成图片的颜色
        默认为 0 为黑色
       可以使用 #颜色标号 来表示颜色
        也可以使用 模块定义过意义的 颜色字符串 来表示
im.copy()  复制当前对象 然后返回对象
im.crop()  裁剪图片
    参数为 元组类型 (x,y,x1,y1) 表示坐标
      原点为原图片的左上角
im.paste(im1,坐标)
    将im1保存的图片 粘贴在 im对象所保存的图片上
        im1 保存的图片的左上角为 坐标的左上角
        坐标为(x,y)(x,y,x1,y1) 
            如果坐标为 (x,y,x1,y1) 格式那么需要手动计算 需要粘贴的图片大小
                需要保证
                    x1-x =im1保存的图片的宽
                    y1-y =im1保存的图片的高
    im.paste(im1,坐标,im2)
        将im1和im2 做透明重叠之后粘贴到im图片的指定坐标的位置上
im.filter(过滤器)
      需要导入 from PIL import ImageFilter
      返回过滤后的图片对象
      过滤器有
        ImageFilter.BLUR                均值过滤 会将图片变的模糊
        ImageFilter.CONTOUR             找轮廓   将原图片的轮廓信息提取出来
        ImageFilter.DETAIL              使细节变得更加明显
        ImageFilter.EDGE_ENHANCE        提高人眼对目标图片的识别能力
        ImageFilter.EDGE_ENHANCE_MORE   使图片中间部分的边缘更加明显
        ImageFilter.EMBOSS              使图像呈现出浮雕效果
        ImageFilter.FIND_EDGES          边缘检测 找出图片的边缘信息
        ImageFilter.SMOOTH              使图片平缓渐变 减少突变梯度 改善图片质量
        ImageFilter.SMOOTH_MORE         使图片更加平滑
        ImageFilter.SHARPEN             使图片变得清晰
Image.blend(im1,im2,n)
      设置两张图片的透明度 将两张图片合成一张图片
        n为透明度
        将im1的透明度设置为 im1*(1.0-n) (1.0-n)表示im1的透明程度
        im2的透明度设置为 im1*n  n表示im2 的透明度
        然后将两张图片叠加在一起
      两张图片的大小需要相同
im.split() 
    返回三个图片对象 分别代表图像的三个通道 R G B 
     相当于原先 3*8位 为一个像素
     使用split() 之后
     将每一个像素分为 8位一个像素 比如 R 只包括 代表R通道的那8位
Image.composite(im1,im2,m)
     使用m图片作为 透明度
     对im1 im2 做透明处理 然后叠加在一张图片 返回
     所有图片的大小必须相同
Image.eval(im1,fun)
     fun 是一个函数 有一个参数  
     将im1 保存的图片的每个像素的每个通道 作为参数传入fun函数 进行处理
     返回一张处理好的图片
Image.merge(mode,[im])
     将多个单通道的图片按照一定的像素格式合成一张图片
     mode 表示合成图像的像素格式
      mode表示的像素格式 的通道个数 就是 图像列表需要拥有的成员的个数
im.draft(mode,size)
     将im的像素格式设置为mode 
     大小设置为 size  size为元组格式
     返回修改后的图片对象
im.getbands()  
    将im所保存的对象 每个通道的名称 作为元组保存
im.getbbox()
    返回 (x,y,x1,y1)
        x,y   左上
        x,y1  左下
        x1,y  右上
        x1,y1 右下
im.getdata()
    返回 Sequence  可以使用list转换为列表
      这个 列表中的成员是图片的所有像素
     成员为元组类型  元组中储存的 是图片的每个像素的R G B 三个值
     返回的列表的成员顺序和 像素的关系是 一行一行对应  类似c语言中的二维数组
im.getextrema()
    返回值 元组类型 每个成员表示 RGB 三个通道
     每个成员为元组类型 储存分别储存 RGB 三个通道的最大值和最小值
im.getpixel((x,y))
    返回im保存的图片 的指定位置像素的信息
       比如如果像素格式为 RGB 那么 返回值就为 储存指定位置的RGB 三个通道的值的元组
    如果要批量获取像素信息 使用 getdata 比较好
im.load()  
     返回一个用于读取和修改像素的对象
     a=im.load()
     可以使用a这个对象 读取im保存的图片的每个像素的信息
     也可以通过a这个对象 修改im保存的图片的每个像素的信息
     不过不会直接应用到对应的文件上
     需要im保存才能应用到对应的文件上
     a[0,1]  获取im保存的图片 的左上角向右的第一个像素  的信息
     a[0,1]=(r,g,b)  这里假设im保存的图片的像素格式为 rgb
        那么要赋值时使用的元组的成员个数就需要对应 R G B 三个通道
im.putdata(data,s,o)
    从im保存的图片的左上角开始 
      保存的顺序为:
        a=im.load()
        for i in range(n):
            for j in range(n2):
                a[j,i]=data[j+n2*i]*s+o
     这里以图片的像素格式为 L 为例子
     data的成员的类型在和像素格式有关
     如果图片有多个通道 那么 data的成员就为元组类型 元组中的成员就对应通道
im.Resize((w,h))
     将im对应的图片 的宽设置为 w  高设置为 h
        并对图片进行 相应的 拉伸和压缩
     返回修改后的图片
im.Rotate(n,fil,exp)
    将im对应的图片 顺时针旋转n度
    fil默认为 NEAREST 
        可使用 NEAREST BILINEAR BICUBIC ANTIALIAS 默认为 NEAREST
        用来表示旋转后图片的质量
    exp 默认为 false 表示输出图像与原图大小相同 多出的部分被忽略
        如果为true 那么将自动缩小旋转后的图像 使旋转不使图片缺少 旋转之后整个图片和原图大小相同
im.seek(n)
    当im为 gif图片文件对象时使用
     导入图片之后直接输出 会 显示第0帧
     im.seek(1) 会将im当前输出的图片变为原图的 第1帧
     不影响后面获取原图某一帧
im.tell()
     im为gif图片文件对象
     返回当前图片位于原图的第n帧 从0 计算
im.thumbnail(n,f)
     f 为 NEAREST BILINEAR BICUBIC ANTIALIAS 默认为 NEAREST
     其中质量最好的为 ANTIALIAS 
     将图片按照比例缩放到符合n的大小  不会大于n
     n的值应为 (w,h)
im.transform(s,me,data,fil)
    s的格式为(w,h)
     在im所保存的图片中截取data所表示的范围中的图像
    将截取的图像按照比例放大或缩小 到s所表示的大小
    me可取的值 为 EXTENT       截取一个矩形区域 
                    当me 的值为 Image.EXTENT 时
                        data为一个 有四个成员的元组用来代表 矩形的左上角 和右下角
                            (x,y,x1,y1)
                  AFFINE       放射变换
                      当me的值为 Image.AFFINE 时
                          data为一个有六个成员的元组 
                         将新生成的每一个像素的位置设置为 (x,y)
                         将data设置为 (a,b,c,d,e,f)
                         新生成的图片叫 im1
                        那么 im1 的每一个像素 就是 
                          原图片的 (a*x+b*y+c,d*x+e*y+f)所指向的位置处的像素
                         新图片的(1,1) 位置的像素就是
                         原图片的 (a+b+c,d+e+f) 位置的像素
                  QUAD         将四边型转换为矩形
                       当me的值为 Image.QUAD 时
                          data为一个有八个成员的元组(x,y,x1,y1,x2,y2,x3,y3)
                            每一对(xn,yn) 都表示四边形的一个角的坐标
                         在截取由data表示的四边形后 
                          再将这样一个图形强行变成s(w,h) 所表示的矩形
                  MESH         映射多个正方形 
                  
                  PERSPECTIVE  对图像进行透视变换
                    类似AFFINE 
                     当me的值为 Image.PERSPECTIVE 时
                        data为一个有八个成员的元组(a,b,c,d,e,f,g,h)
                       将新生成的图像的每一个像素的位置设置为(x,y)
                       新生成的图像的名称为 im1
                       那么im1的每一个像素 就是 原图像的
                        ((a*x+b*x+c)/(g*x+h*y+1),(d*x+e*y+f)/(g*x+h*y+1))
                         位置的像素 一一对应
im.transpose(m)
    旋转或翻转当前图像
        m可取值 FLIP_LEFT_FIGHT    将原图左右翻转后的结果返回
                FLIP_TOP_BOTTOM    将原图上下反转后的结果返回
                ROTATE_90          将原图顺时针旋转90度后的结果返回
                ROTATE_180         将原图顺时针旋转180度后的结果返回
                ROTATE_270         将原图顺时针旋转270度之后的结果返回

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值