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
(im1, im2, alpha)
# 将两张图合并为一张图,返回一张新的图 公式如下:
# 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)
# 旋转图像
本博客来自于
http://www.cnblogs.com/283383765pw/
抄袭可耻
请支持原作者