01 -- Image模块

说明

# 手残党还喜欢打字飞快的感觉所以    错别字有点多,但是应该不影响阅读  如果在博客中有什么错误请及时指正,同时在下面留言以免其他人同样入坑

Image模块

# Image 模块提供了一个同名类,包含了很多函数包含加载、生成新图片等

显示图像

from PIL import Image
img = Image.open("./1.jpg")  #加载当前目录下的 1.jpg   
img.rotate(45).show()  # 逆时针旋转45度后显示   --- 调用默认的查看器
# 之前的测试文件我偷懒改了一下又搬出来了

创建图像

from PIL import Image
import glob,os

size = 256, 256  # 设置新生成的图像的宽高   宽高某一项等于设置的时候  另外一项不会缩放

for infile in glob.glob("*.jpg"):     # 从当前目录导入文件
    fil, ext = os.path.splitext(infile)
    img = Image.open(infile)
    img.thumbnail(size)
    img.show()

# 运行效果:
# 循环从当前的目录下导入文件   重新创建成为一个小图像然后显示出来

函数

PIL.Image.open(file,mode='r')

# 如同python自带的文件读取一样  默认打开为 r 模式(只读)
# 打开之后不会立即加载文件只是获得一个文件句柄,只有当运行.load()函数或者对图像进行操作的时候才会加载图像

PIL.Image.alpha_composit(img1,img2)

# 混合img1以及img2 的alpha通道
# img1以及img2 必须是RGBA模式 且两张图像大小相同
from PIL import Image
img1 = Image.open("./1.jpg").convert("RGBA") # 打开图片并且转换为RGBA模式
size = img1.size # 返回一个包含图像大小的元组
img2 = Image.open("./2.jpg").convert("RGBA")
img2 = img2.resize(size) # 修改img2 为img1相同大小
outImg = Image.alpha_composite(img1, img2)
outImg.show()
# 因为两张图的 alpha 通道(不透明度)都为1,即完全不透明所以第2张图完全覆盖了第一张图

 

PIL.Image.blend(im1im2alpha)

# 将两张图合并为一张图,返回一张新的图 公式如下:
# outImage = img1 * (1 - alpha) + img2 * alpha
from PIL import Image
img1 = Image.open("./1.jpg")
size = img1.size # 返回一个包含图像大小的元组
img2 = Image.open("./2.jpg")
img2 = img2.resize(size) # 修改img2 为img1相同大小
outImg = Image.blend(img1, img2, 0.3)
outImg.show()
 # 看上去效果有点奇怪

 

 PIL.Image.composite

 

from PIL import Image
img1 = Image.open("./1.jpg").convert("RGBA")   # 打开图片并且转换为RGBA模式
size = img1.size  # 返回一个包含图像大小的元组
img2 = Image.open("./2.jpg").convert("RGBA")
img2 = img2.resize(size)  # 修改img2 为img1相同大小
img_mask = Image.open("./3.jpg").convert("L")  # 转为灰度图  也可以转换为其它的具有不透明度的图像例如 RGBA 
img_mask = img_mask.resize(size)

outImg = Image.composite(img1, img2, img_mask)  
outImg.show()

 

Pil.Image.eval(img,*args)

# 同名于python中的评估函数,作用:
# 给指定的img 中的每一个像素添加一个函数,这个函数需要有一个int型的方法
# eval函数返回一个Image对象

 Pil.Image.merge(mode,bands)

# 将多个单波图像合并成一个新的多播图像
# mode -- 输出图像的模式
# bands -- 包含输出图像中每个波段的一个 单波段图像 所有图像需要有相同的小小

PIL.Image.new(mode,size,color=0)

# 构建一个新的图像
from PIL import Image

size = (800, 600)
img1 = Image.new("RGB", size, "red") # 生成红色的RGB图像
img2 = Image.new("RGBA", size, (0, 255, 255, 1)) # 生成RGBA模式的不透明图像

img1.show() # 红色
img2.show() # 淡蓝色

PIL.Image.fromarray(obj,mode=none)

from PIL import Image
import numpy
img = Image.open("./1.jpg")
arr = numpy.asarray(img)
print(type(arr))  # <class 'numpy.ndarray'>

img = Image.fromarray(arr)
print(type(img))  # <class 'PIL.Image.Image'>
img.show() # 可以直接输出图像
# 可以将ndarray数组转为 PIL的图像   
# obj -- 一个有数组接口的对象 (Object with array interface)
# mode-- 使用的模式,如果没有则从类型确定

PIL.Image.frombytes(mode,size,data,decode_name="raw",*args)

# 根据缓冲区的数据创建图像副本
# mode -- 图像模式
# size -- 图像的大小
# data -- 包含给定模式的原始数据的字节缓冲区
# decoder_name -- 使用的解码器
# args --给解码器的参数
# return Image Objiec

PIL.Image.fromstring(*args**kw)

# 从字符串创建图像

PIL.Image.buffer(mode,size,data,decoder_name="raw",*args)

# 创建引用字节缓冲区中像素数据的图像内存
# mode -- 图像模式
# size -- 图像的大小
# data -- 包含给定模式的原始数据的字节缓冲区
# decoder_name -- 使用的解码器
# args --给解码器的参数 默认为raw
# return Image Objiec

 注册插件

# 插件功能不能提供在应用程序的代码使用
# 适用于插件开发

PIL.Image.register_open(id,factory,accept=None)

PIL.Image.register_decoder(name,decoder)

PIL.Image.register_mime(id,mimetype)

PIL.Image.register_save(id,driver)

PIL.Image.register_encode(name,encoder)

PIL.Image.register_extension(id,extension)

 

Image类

PIL.Image.Image

一下方法返回Image实例对象

  open()

  new()

  frombytes()

Image.convert(mode=None,matrix=None,dither=None,palette=0,clolr=256)

# 返回一个转换后的副本图像对象
# 如果模式为p则通过调色板转换像素
# 目前支持
# L
# RGB
# CMYK
# matrix 目前只支持 L和 RGB
# mode -- 模式
# matrix -- 可选的转换矩阵,如果给定则为4或者12元组
# dither -- 抖动 RGB->P/1 L->1 参数为 NONE / FLOYDSTEINBERG
# palette -- 调色板 RGB->P时使用调色板 参数为 WEB / ADAPTIVE
# color -- ADAPTIVE调色板使用的颜色 默认为 256


# 之前右使用过

Image.copy()

# 返回图像的一个副本

Image.crop(box=None)

# 从图像返回一个矩形区域,  该框是一个4元组,上下左右的像素坐标

Image.draft(mode,size)

# 第一次加载图像的时候,确定加载的模式,以及大小
# 目前只支持jpeg 格式图像

Image.filter(filter)

# 使用给定的滤镜 过滤一张图像

Image.getbands()

# 获取图像的每个波段的名称的元组 例如 ("R","G","B")

Image.getbox()

# 计算图像中非0区域的边界框

Image.getcolors(maxcolor=256)

# 返回图像中使用的图像列表
# maxcolor -- 最大的颜色数,此方法返回为None,默认为256

Image.getdata(band=None)

# 将图像的内容作为包含像数值的序列对象返回 
# band -- 要返回的波段, 默认为所有波段 也可以指定 如:(0) 获得RGB中的R

Image.getextrema()

# 获取每个波段中的最大值以及最小值 用元组嵌套显示

Image.getpalette()

# 返回调色板的列表

Image.getpixel(xy)

# 返回指定位置的像素值  x,y使用元组

from PIL import Image

img = Image.open("./1.jpg")
data = img.getpixel((100, 100))
print(data)  #(254,254,254)  元组形式

Image.histogram(mask=None,extrma=None)

#  返回图像直方图,直方图作为像素计数列表返回

Image.paste(img,box=None,mask=None)

# 将另外一张图粘贴到此图上面,box参数是给出左上角2元组或者左上右下4元组 或者None(0,0)

Image.resize(size,resample=0,box=None)

# size  -- 元组形式
# resample -- 过滤器
PIL.Image.NEAREST
PIL.Image.Box
     PIL.Image.BILINEAR
    PIL.Image.HAMMING
     PIL.Image.BICUBIC
     PIL.Image.LANCZOS
如果省略或者为 1 / P 设置为PIL.Image.NEAREST

Image.rotate(angle,resample,expand=0,center=None,translate=None)

 

#  旋转图像

 

posted @ 2018-10-22 15:23  一剑烟雨  阅读(421)  评论(1编辑  收藏  举报