Image模块

Image模块是在Python PIL图像处理中常见的模块,对图像进行基础操作的功能基本都包含于此模块内。如open、save、conver、show…等功能。

open类

Image.open(file) "htmlcode">

 @zhangziju
 from PIL import Image    ##调用库
 im = Image.open("E:\mywife.jpg") ##文件存在的路径
 im.show() 

Python图像处理PIL各模块详细介绍(推荐)

需要知道的是在win的环境下im.show的方式为win自带的图像显示应用。打开并确认给定的图像文件。这个是一个懒操作;该函数只会读文件头,而真实的图像数据直到试图处理该数据才会从文件读取(调用load()方法将强行加载图像数据)。如果变量mode被设置,那必须是“r”。用户可以使用一个字符串(表示文件名称的字符串)或者文件对象作为变量file的值。文件对象必须实现read(),seek()和tell()方法,并且以二进制模式打开。

Save类

im.save(outfile,options…)
im.save(outfile, format, options…)

若要保存文件,则使用 Image 类的 save() 方法,此时保存文件的文件名就变得十分重要了,除非指定格式,否则这个库将会以文件名的扩展名作为格式保存。使用给定的文件名保存图像。如果变量format缺省,如果可能的话,则从文件名称的扩展名判断文件的格式。该方法返回为空。关键字options为文件编写器提供一些额外的指令。如果编写器不能识别某个选项,它将忽略它。用户可以使用文件对象代替文件名称。在这种情况下,用户必须指定文件格式。文件对象必须实现了seek()、tell()和write()方法,且其以二进制模式打开。如果方法save()因为某些原因失败,这个方法将产生一个异常(通常为IOError异常)。如果发生了异常,该方法也有可能已经创建了文件,并向文件写入了一些数据。如果需要的话,用户的应用程序可以删除这个不完整的文件。

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im)
im.save("E:\mywife.png")  ## 将"E:\mywife.jpg"保存为"E:\mywife.png"
im = Image.open("E:\mywife.png") ##打开新的png图片
print(im.format, im.size, im.mode)

Python图像处理PIL各模块详细介绍(推荐) 

如下图,在指定路径下可看到新保存的png格式的图片。

Python图像处理PIL各模块详细介绍(推荐)

format类

im.format "htmlcode">

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.format) ## 打印出格式信息
im.show()

如下图可以看到其format为”JPEG”。

Python图像处理PIL各模块详细介绍(推荐)

Mode类

im.mode "height: 228px; width: 362px"> modes 描述 1 1位像素,黑和白,存成8位的像素 L 8位像素,黑白 P 8位像素,使用调色板映射到任何其他模式 RGB 3× 8位像素,真彩 RGBA 4×8位像素,真彩+透明通道 CMYK 4×8位像素,颜色隔离 YCbCr 3×8位像素,彩色视频格式 I 32位整型像素 F 32位浮点型像素

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.mode) ## 打印出模式信息
im.show()

 如下图为图片的mode为“RGB”模式。

Python图像处理PIL各模块详细介绍(推荐)

convert类

im.convert(mode)"htmlcode">

from PIL import Image
im = Image.open("E:\mywife.jpg")
new_im = im.convert('P')
print(new_im.mode)
new_im.show()

如下,将图像转换为“P”模式。

Python图像处理PIL各模块详细介绍(推荐) 

对比原始图像。

Python图像处理PIL各模块详细介绍(推荐)

im.convert(“P”,**options) "htmlcode">

from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.mode)
rgb2xyz = (0.412453,0.357580, 0.180423, 0,
   0.212671,0.715160, 0.072169, 0,
   0.019334,0.119193, 0.950227, 0 )
new_im = im.convert("L", rgb2xyz)
print(new_im.mode)
new_im.show()

Python图像处理PIL各模块详细介绍(推荐) 

转换后效果

Python图像处理PIL各模块详细介绍(推荐)

Size类

im.size "htmlcode">

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.size) ## 打印出尺寸信息
im.show()

如下图所示为图片的尺寸信息,750*560。

Python图像处理PIL各模块详细介绍(推荐)

Palette类

im.palette "htmlcode">

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.palette)

易知,返回值为空,none

Python图像处理PIL各模块详细介绍(推荐) 

对图像进行convert操作,转换成“P”模式

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
new_im = im.convert('P')
print(new_im.mode)
print(new_im.palette)

则返回值为ImagePalette类的实例。如下:

Python图像处理PIL各模块详细介绍(推荐)

Info类

im.info "htmlcode">

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.info)

Python图像处理PIL各模块详细介绍(推荐)

new类

Image.new(mode,size) "htmlcode">

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
n_im= Image.new("RGB", (128, 128), "#FF0000")
n_im.show()

显示效果如下:

Python图像处理PIL各模块详细介绍(推荐) 

如下图像为128x128大小的黑色图像,因为变量color不赋值的话,图像内容被设置为0,即黑色。

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
n_im= Image.new("RGB", (128, 128))
n_im.show()

Python图像处理PIL各模块详细介绍(推荐) 

图像为128x128大小的绿色图像。

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
n_im= Image.new("RGB", (128, 128),"green")
n_im.show()

Python图像处理PIL各模块详细介绍(推荐)

Copy类

im.copy() "htmlcode">

from PIL import Image
im = Image.open("E:\mywife.jpg")
im_copy = im.copy()

图像im_copy和im完全一样。

Crop类

im.crop(box) "text-align: center">Python图像处理PIL各模块详细介绍(推荐)

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
box = (300, 100, 700, 700)    ##确定拷贝区域大小
region = im.crop(box)     ##将im表示的图片对象拷贝到region中,大小为box
region.show()

如下图为box截取的图像区域显示。

Python图像处理PIL各模块详细介绍(推荐)

Paste类

im.paste(image,box)

将一张图粘贴到另一张图像上。变量box或者是一个给定左上角的2元组,或者是定义了左,上,右和下像素坐标的4元组,或者为空(与(0,0)一样)。如果给定4元组,被粘贴的图像的尺寸必须与区域尺寸一样。如果模式不匹配,被粘贴的图像将被转换为当前图像的模式。

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
box=[0,0,100,100]
im_crop = im.crop(box)
print(im_crop.size,im_crop.mode)
im.paste(im_crop, (100,100))    ##(100,100,0,0)
im.paste(im_crop, (400,400,500,500))
im.show()

如下图为paste操作:

Python图像处理PIL各模块详细介绍(推荐)

Filter类

im.filter(filter) "htmlcode">

@zhangziju
from PIL import Image
from PIL import ImageFilter       ## 调取ImageFilter
imgF = Image.open("E:\mywife.jpg")
bluF = imgF.filter(ImageFilter.BLUR)    ##均值滤波
conF = imgF.filter(ImageFilter.CONTOUR)    ##找轮廓
edgeF = imgF.filter(ImageFilter.FIND_EDGES)   ##边缘检测
imgF.show()
bluF.show()
conF.show()
edgeF.show()

滤波处理下的gakki~

Python图像处理PIL各模块详细介绍(推荐)

Blend类

Image.blend(image1,image2, alpha) "htmlcode">

@zhangziju
from PIL import Image
im1 = Image.open("E:\mywife.jpg")
im2 = Image.open("E:\mywife2.jpg")
print(im1.mode,im1.size)
print(im2.mode,im2.size)
im = Image.blend(im1, im2, 0.2)
im.show()

需保证两张图像的模式和大小是一致的,如下为显示im1和im2的具体信息。

Python图像处理PIL各模块详细介绍(推荐) 

im1和im2按照第一张80%的透明度,第二张20%的透明度,合成为一张。

Python图像处理PIL各模块详细介绍(推荐)

Split

im.split() "htmlcode">

from PIL import Image
im = Image.open("E:\mywife.jpg")
r,g,b = im.split()
print(r.mode)
print(r.size)
print(im.size)

Python图像处理PIL各模块详细介绍(推荐)

Composite类

Image.composite(image1,image2, mask) "htmlcode">

@zhangziju
from PIL import Image
im1 = Image.open("E:\mywife.jpg")
im2 = Image.open("E:\mywife2.jpg")
r,g,b = im1.split()    ##分离出r,g,b
print(b.mode)
print(im1.mode,im1.size)
print(im2.mode,im2.size)
im = Image.composite(im1,im2,b)
im.show()

b.mode为”L”,两图尺寸一致。

Python图像处理PIL各模块详细介绍(推荐) 

最终效果

Python图像处理PIL各模块详细介绍(推荐)

Eval类

Image.eval(image,function) "htmlcode">

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
def fun01(x):
 return x*0.3
def fun02(y):
 return y*2.0
im1_eval = Image.eval(im, fun01)
im2_eval = Image.eval(im, fun02)
im1_eval.show()
im2_eval.show()

在函数fun01和fun02下的图像显示。

Python图像处理PIL各模块详细介绍(推荐)

Merge类

Image.merge(mode,bands) "htmlcode">

@zhangziju
from PIL import Image
im1 = Image.open("E:\mywife.jpg")
im2 = Image.open("E:\mywife2.jpg")
r1,g1,b1 = im1.split()
r2,g2,b2 = im2.split()
print(r1.mode,r1.size,g1.mode,g1.size)
print(r2.mode,r2.size,g2.mode,g2.size)
new_im=[r1,g2,b2]
print(len(new_im))
im_merge = Image.merge("RGB",new_im)
im_merge.show()

打印信息显示

Python图像处理PIL各模块详细介绍(推荐) 

merge操作

Python图像处理PIL各模块详细介绍(推荐)

Draft类

im.draft(mode,size)

配置图像文件加载器,使得返回一个与给定的模式和尺寸尽可能匹配的图像的版本。

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.size,im.mode)
new_im = im.draft("L", (200,200))
print(new_im.size,new_im.mode)
new_im.show()

关键信息显示

Python图像处理PIL各模块详细介绍(推荐) 

转换效果

Python图像处理PIL各模块详细介绍(推荐)

Getbands类

im.getbands()"htmlcode">

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.getbands())

Python图像处理PIL各模块详细介绍(推荐)

Getbbox类

im.getbbox() "htmlcode">

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.getbbox())

Python图像处理PIL各模块详细介绍(推荐)

Getdata类

im.getdata() "htmlcode">

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
sequ = im.getdata()
sequ0 = list(sequ)
print(sequ0[0])
print(sequ0[1])
print(sequ0[2])

可视化显示sequence0里面的数据。

Python图像处理PIL各模块详细介绍(推荐) 

打印显示结果,与前面对比。

Python图像处理PIL各模块详细介绍(推荐)

Getextrema类

im.getextrema() "htmlcode">

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.getextrema())

该方法返回了R/G/B三个通道的最小和最大值的2元组。

Python图像处理PIL各模块详细介绍(推荐)

Getpixel类

im.getpixel(xy) "htmlcode">

@zahngziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.getpixel((0,0)))
print(im.getpixel((4,0)))
r,g,b = im.split()
print(b.getpixel((11,8))) 

Python图像处理PIL各模块详细介绍(推荐)

Histogram类

im.histogram()"htmlcode">

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
imhis = im.histogram()
print(len(imhis))
print(imhis[0])
print(imhis[150])
print(imhis[300])

Python图像处理PIL各模块详细介绍(推荐)

im.histogram(mask)"htmlcode">

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
r,g,b = im.split()
imhis = im.histogram()
print(r.mode)
print(len(imhis))
print(imhis[0])
print(imhis[150])
print(imhis[300])

Python图像处理PIL各模块详细介绍(推荐)

Load类

im.load()

为图像分配内存并从文件中加载它(或者从源图像,对于懒操作)。正常情况下,用户不需要调用这个方法,因为在第一次访问图像时,Image类会自动地加载打开的图像。在1.1.6及以后的版本,方法load()返回一个用于读取和修改像素的像素访问对象。这个访问对象像一个二维队列,如:

pix = im.load()
print pix[x, y]
pix[x, y] =value

通过这个对象访问比方法getpixel()和putpixel()快很多。

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
pix = im.load()
print(pix[0,2])

Python图像处理PIL各模块详细介绍(推荐)

im.paste(colour,box)

使用同一种颜色填充变量box对应的区域。对于单通道图像,变量colour为单个颜色值;对于多通道,则为一个元组。

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
im.paste((256,256,0),(0,0,100,100)) ##(256,256,0)表示黄色
im.show()

Python图像处理PIL各模块详细介绍(推荐)

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
im.paste("blue",(0,0,100,100)) ##或者“blue”
im.show()

Python图像处理PIL各模块详细介绍(推荐)

im.paste(image,box, mask)

使用变量mask对应的模板图像来填充所对应的区域。可以使用模式为“1”、“L”或者“RGBA”的图像作为模板图像。模板图像的尺寸必须与变量image对应的图像尺寸一致。如果变量mask对应图像的值为255,则模板图像的值直接被拷贝过来;如果变量mask对应图像的值为0,则保持当前图像的原始值。变量mask对应图像的其他值,将对两张图像的值进行透明融合,如果变量image对应的为“RGBA”图像,即粘贴的图像模式为“RGBA”,则alpha通道被忽略。用户可以使用同样的图像作为原图像和模板图像。

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
box=[300,300,400,400]
im_crop =im.crop(box)
r,g,b =im_crop.split()
im.paste(im_crop, (200,200,300,300), r)
im.show()

Python图像处理PIL各模块详细介绍(推荐)

Putdata类

im.putdata(data)
im.putdata(data, scale, offset)

从sequence对象中拷贝数据到当前图像,从图像的左上角(0,0)位置开始。变量scale和offset用来调整sequence中的值:

pixel = value*scale + offset

如果变量scale忽略,则默认为1.0。如果变量offset忽略,则默认为0.0。

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
r, g, b = im.split()
print(
r.getpixel((0, 0)),
r.getpixel((1, 0)),
r.getpixel((2, 0)),
r.getpixel((3, 0)),
r.putdata([1, 2, 3, 4]),
r.getpixel((0, 0)),
r.getpixel((1, 0)),
r.getpixel((2, 0)),
r.getpixel((3, 0)),
)

Python图像处理PIL各模块详细介绍(推荐)

Resize类

im.resize(size) "htmlcode">

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
region = im.resize((400, 400))  ##重新设定大小
region.show()

很明显由于大小的重新设定,图片的显示效果有所转变,gakki依然美腻~

Python图像处理PIL各模块详细介绍(推荐)

Rotate类

im.rotate(angle) "htmlcode">

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
im_45 = im.rotate(45)
im_30 = im.rotate(30, Image.NEAREST,1)
print(im_45.size,im_30.size)
im_45.show()
im_30.show()

Python图像处理PIL各模块详细介绍(推荐)

Python图像处理PIL各模块详细介绍(推荐)

Seek类

im.seek(frame)

在给定的文件序列中查找指定的帧。如果查找超越了序列的末尾,则产生一个EOFError异常。当文件序列被打开时,PIL库自动指定到第0帧上。

@zhangziju
from PIL import Image
im_gif = Image.open("E:\mywife.gif")
print(im_gif.mode)
im_gif.show() ##第0帧
im_gif.seek(3)
im_gif.show()
im_gif.seek(9)
im_gif.show()

来来来~这是gakki原图欣赏下~

Python图像处理PIL各模块详细介绍(推荐) 

查找帧seek()的效果如下:

Python图像处理PIL各模块详细介绍(推荐)

Tell类

im.tell() "htmlcode">

@zhangziju
from PIL import Image
im_gif = Image.open("E:\mywife.gif")
print(im_gif.tell())
im_gif.seek(8)
print(im_gif.tell())

Python图像处理PIL各模块详细介绍(推荐)

Thumbnail类

im.thumbnail(size)
im.thumbnail(size, filter)

修改当前图像,使其包含一个自身的缩略图,该缩略图尺寸不大于给定的尺寸。这个方法会计算一个合适的缩略图尺寸,使其符合当前图像的宽高比,调用方法draft()配置文件读取器,最后改变图像的尺寸。变量filter应该是NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果省略该变量,则默认为NEAREST。注意:在当前PIL的版本中,滤波器bilinear和bicubic不能很好地适应缩略图产生。用户应该使用ANTIALIAS,图像质量最好。如果处理速度比图像质量更重要,可以选用其他滤波器。这个方法在原图上进行修改。如果用户不想修改原图,可以使用方法copy()拷贝一个图像。这个方法返回空。

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
im.thumbnail((100,100))

Transform类

im.transform(size,method, data) "htmlcode">

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.size)
imtra = im.transform((200, 200), Image.EXTENT, (0, 0, 500, 500))
print(imtra.size)
imtra.show()

Python图像处理PIL各模块详细介绍(推荐)

Python图像处理PIL各模块详细介绍(推荐)

im.transform(size,EXTENT, data) "htmlcode">

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.size)
imtra = im.transform((200, 200), Image.AFFINE, (1,2,3,2,1,4))
print(imtra.size)
imtra.show()

Python图像处理PIL各模块详细介绍(推荐) 

Python图像处理PIL各模块详细介绍(推荐)

im.transform(size,QUAD, data) "htmlcode">

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.size)
imtra = im.transform((200, 200), Image.QUAD, (0,0,0,500,600,500,600,0))
print(imtra.size)
imtra.show()

Python图像处理PIL各模块详细介绍(推荐) 

Python图像处理PIL各模块详细介绍(推荐)

im.transform(size,PERSPECTIVE, data) "htmlcode">

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.size)
imtra = im.transform((200, 200), Image.PERSPECTIVE, (1,2,3,2,1,6,1,2))
print(imtra.size)
imtra.show()

Python图像处理PIL各模块详细介绍(推荐) 

wocao!!!gakki不见了!!!

Python图像处理PIL各模块详细介绍(推荐)

Transpose类

im.transpose(method)"htmlcode">

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
im.rotate(45)        #逆时针旋转 45 度角。
im.transpose(Image.FLIP_LEFT_RIGHT)  #左右对换。
im.transpose(Image.FLIP_TOP_BOTTOM)  #上下对换。
im.transpose(Image.ROTATE_90)    #旋转 90 度角。
im.transpose(Image.ROTATE_180)   #旋转 180 度角。
im.transpose(Image.ROTATE_270)   #旋转 270 度角。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?