0x01、PIL库
python提供了PIL图像处理库,Image类是PIL库中一个非常重要的类,通过这个类创建实例可以有直接载入图像文件,读取处理过的图像和通过抓取的方法得到的图像这三种方法。功能上,虽然还不能跟Matlab比较,但是还是比较强大的。
安装过程使用pip进行安装。
0x02、PIL常见函数
1.导入图像库
import Image
2.读取一张图片
im=Image.open(‘/home/Picture/test.jpg’)
3.显示一张图片
im.show()
4.保存图片
im.save(“save.gif”,”GIF”) #保存图像为gif格式
5.创建新图片
Image.new(mode,size)
Image.new(mode,size,color)
newImg = Image.new("RGBA",(640,480),(0,255,0))
newImg.save("newImg.png","PNG")
6.两张图片相加
Image.blend(img1,img2,alpha) # 这里alpha表示img1和img2的比例参数
7.点操作
im.point(function) #,这个function接受一个参数,且对图片中的每一个点执行这个函数
out=im.point(lambdai:i*1.5)#对每个点进行50%的加强
8.查看图像信息
im.format, im.size, im.mode
9.图片裁剪
box=(100,100,500,500) #设置要裁剪的区域
region=im.crop(box) #此时,region是一个新的图像对象。
10.图像黏贴(合并)
im.paste(region,box)#粘贴box大小的region到原先的图片对象中。
11.通道分离
r,g,b=im.split()#分割成三个通道,此时r,g,b分别为三个图像对象。
12.通道合并
im=Image.merge(“RGB”,(b,g,r))#将b,r两个通道进行翻转。
13.改变图像的大小
out=img.resize((128,128))#resize成128*128像素大小
14.旋转图像
out=img.rotate(45) #逆时针旋转45度
有更方便的:
region = region.transpose(Image.ROTATE_180)
15.图像转换
out = im.transpose(Image.FLIP_LEFT_RIGHT) #左右对换。
out = im.transpose(Image.FLIP_TOP_BOTTOM) #上下对换
16.图像类型转换:
im=im.convert(“RGBA”)
17.获取某个像素位置的值:
im.getpixel((4,4))
18.写某个像素位置的值:
img.putpixel((4,4),(255,0,0))
0x03、PIL库基本操作
1、图片属性
from PIL import Image
im = Image.open("1.jpg")
print im.format,im.size,im.mode
format:识别图像的源格式,如果该文件不是从文件中读取的,则被置为 None 值。
size:返回的一个元组,有两个元素,其值为象素意义上的宽和高。
mode : RGB(true color image),此外还有,L(luminance),CMTK(pre-press image)。
2、图形缩放
from PIL import Image
im = Image.open("1.jpg") #打开图片
w,h = im.size #获取图形尺寸
im.thumbnail((w/2,h/2)) #缩放
im.save("2.jpg") #保存图片
3、图片的模糊化处理
from PIL import Image,ImageFilter
im = Image.open("1.jpg")
im2 = im.filter(ImageFilter.BLUR) #模糊化处理
im2.save("3.jpg")
4、图片旋转
from PIL import Image,ImageFilter
im = Image.open("1.jpg")
out = im.rotate(45) #逆时针旋转 45 度角
out = im.transpose(Image.FLIP_LEFT_RIGHT) #左右对换
out = im.transpose(Image.FLIP_TOP_BOTTOM) #上下对换
out = im.transpose(Image.ROTATE_90) #旋转 90 度角
out = im.transpose(Image.ROTATE_180) #旋转 180 度角
out = im.transpose(Image.ROTATE_270) #旋转 270 度角
out.save("4.jpg")
5、它可以进行很多图片的操作,甚者可以生成我们常见的字母验证码廖雪峰python学习
oxo4、PIL库的高级用法
这是一道CTF的mise题,从流量包提取出一个TXT文件,里面全是一些数字,当时完全懵逼了,最后才说是图片的像素点RGB
,可以用连续的三个数字表示一种颜色。
254, 255, 255
254, 255, 255
254, 255, 255
254, 255, 255
254, 255, 255
254, 255, 255
254, 255, 255
254, 255, 255
254, 255, 255
254, 255, 255
254, 255, 255
254, 255, 255
254, 255, 255
254, 255, 255
254, 255, 255
254, 255, 255
......
这么多懵逼了,只能靠python脚本进行处理了。
from PIL import Image
import re
if __name__ == '__main__':
x = 887
y = 111
i = 0
j = 0
c = Image.new("RGB", (x,y)) #创建一个新的图片
file_object = open('1.txt') #打开txt文件
for i in range(0, x):
for j in range(0, y):
line = file_object.next() #逐行读取txt的内容
lst = line.split(",") #分割成三个通道,r,g,b分别为三个图像对象
c.putpixel((i, j), (int(lst[0]), int(lst[1]), int(lst[2]))) #将对应的rgb写入相应的位置
c.show()
c.save("c.png")
这样就会把原图片还原回来,十分的快速方便。