使用官方文档和一些网络资料总结了一下PIL库的一些常用方法的使用,并写成小例子供参考
python PIL库的学习
1.对图像进行旋转
from PIL import Image
im=Image.open("image.jpg")
im.rotate(45).show()
2.改变图像的大小
size=128,128
from PIL import Image
im=Image.open("image.jpg")
im.thumbnail(size) //等比例的缩放
im.show()
//注意,第一次的时候,由于直接在thumbnail方法中直接填入数字,导致出错,后来引入变量size,就成功了,所以推测需要引入变量
3.合并图像
Image.alpha_composite(im1,im2)
Image.blend(im1,im2,a)
//a为第二张图像的透明度
Image.composite(im1,im2,mask)
Image.eval(im1,*args)
4.创建一个新图像
from PIL import Image
im=Image.new("RGBA",(400,600),(0,126,154))
im.save("new.png")
im.show()
//容易出的错误
//1.RGBA模式不能用于存储jpg格式的图片
//2.mode属性可以直接在引号中引用,其他两个属性在括号中引用
5.Image.copy()
图片的复制
6.图片的部分获取
from PIL import Image
im=Image.open("agirl.jpg")
im.crop((10,10,500,500)).show()
//crop中的参数是一个box
//按照左上右下排列,是一个四元组
7.图像的滤波
Image.filter("滤波器内核")
from PIL import Image
from PIL import ImageFilter
im=Image.open("agirl.jpg")
im_blur=im.filter(ImageFilter.BLUR)
im_detail=im.filter(ImageFilter.DETAIL)
im_blur.show()
im_detail.show()
ImageFilter类中预定义了如下滤波方法:
• BLUR:模糊滤波
• CONTOUR:轮廓滤波
• DETAIL:细节滤波
• EDGE_ENHANCE:边界增强滤波
• EDGE_ENHANCE_MORE:边界增强滤波(程度更深)
• EMBOSS:浮雕滤波
• FIND_EDGES:寻找边界滤波
• SMOOTH:平滑滤波
• SMOOTH_MORE:平滑滤波(程度更深)
• SHARPEN:锐化滤波
• GaussianBlur(radius=2):高斯模糊
>radius指定平滑半径。
• UnsharpMask(radius=2, percent=150, threshold=3):反锐化掩码滤波
>radius指定模糊半径;
>percent指定反锐化强度(百分比);
>threshold控制被锐化的最小亮度变化。
• Kernel(size, kernel, scale=None, offset=0):核滤波
当前版本只支持核大小为3x3和5x5的核大小,且图像格式为“L”和“RGB”的图像。
>size指定核大小(width, height);
>kernel指定核权值的序列;
>scale指定缩放因子;
>offset指定偏移量,如果使用,则将该值加到缩放后的结果上。
• RankFilter(size, rank):排序滤波
>size指定滤波核的大小;
>rank指定选取排在第rank位的像素,若大小为0,则为最小值滤波;若大小为size * size / 2则为中值滤波;若大小为size * size - 1则为最大值滤波。
• MedianFilter(size=3):中值滤波
>size指定核的大小
• MinFilter(size=3):最小值滤波器
>size指定核的大小
• MaxFilter(size=3):最大值滤波器
>size指定核的大小
• ModeFilter(size=3):波形滤波器
8.获取一个正方形盒子数据
im.getbbox()
from PIL import Image
from PIL import ImageFilter
im=Image.open("agirl.jpg")
print(im.getbbox())
//计算图像的边框值,并且返回一个四元组
//按照左上右下
9.返回使用在这张图片上的颜色值
from PIL import Image
from PIL import ImageFilter
im=Image.open("agirl.jpg")
print(im.getcolors())
//如果颜色超过最大值,将返回None
10.调整图片大小
Image.resize(size, resample=0, box=None)
from PIL import Image
im=Image.open("agirl.jpg")
im.resize((120,210)).show()
//第一个属性是一个长宽二元组
//返回的是一个复制原图片的改变大小的图片
11.图像旋转
Image.rotate(angle, resample=0, expand=0, center=None, translate=None)
from PIL import Image
im=Image.open("agirl.jpg")
im.rotate(45).show()
im.rotate(45,expand=1).show()
//第一种看图片效果是只旋转了图片
//第二种对原有图片进行了扩展,看着更舒服些
12.图像的储存
Image.save(fp, format=None, **params)
//第二个属性是格式的转换
13.图像文件的关闭
Image.close()
//不知道具体有什么影响,可能是不关闭会一直加载到没存中
//建议使用完之后习惯性的关闭图片