Python PIL库的运用

PIL库概述

PIL库是Python的优秀第三方库,它需要通过pip安装:

pip install pillow 

PIL库支持图像存储、显示和处理,它能够处理几乎所有图片格式,可以完成对图像的缩放、剪裁、叠加以及向图像添加线条、图像和文字等操作。

PIL库Image类解析

在PIL中,任何一个图像文件都可以用Image对象表示Image类的图像读取和创建方法:

Image.open(filename)    #根据参数加载图像文件
Image.new(mode, size, color)    #根据给定参数创建一个新的图像
Image.open(StringIO.StringIO(buffer))    #从字符串中获取图像
Image.frombytes(mode, size, data)    #根据像素点data创建图像
Image.verify()    #对图像文件完整性进行检查,返回异常

Image类有4个处理图片的常用属性 :

Image.format    #标识图像格式或来源,如果图像不是从文件读取,值是None
Image.mode    #图像的色彩模式,"L"灰度图像、"RGB"真彩色图像、"CMYK"出版图像
Image.size    #图像宽度和高度,单位是像素(px),返回值是二元元组(tuple)
Image.palette    #调色板属性,返回一个ImagePalette类型

Image类图片有3种转换和保存方法:

Image.save(filename, format)    #将图像保存为filename文件名,format是图片格式
Image.convert(mode)     #使用不同的参数,转换图像为新的模式
Image.thumbnail(size)     #创建图像的缩略图,size是缩略图尺寸的二元元组

Image类图片缩放和旋转方法:

Image.resize(size)	#按size大小调整图像,生成副本
Image.rotate(angle)	#按angle角度旋转图像,生成副本

Image类能够对每个像素点或者一幅RGB图像的每个通道单独进行操作,split()方法能够将RGB图像各颜色通道提取出来,merge()方法能够将各独立通道再合成一幅新的图像:

Image.point(func)    #根据函数func功能对每个元素进行运算,返回图像副本
Image.split()    #提取RGB图像的每个颜色通道,返回图像副本
Image.merge(mode,bands)    #合并通道 ,采用mode色彩,bands是新色的色彩通道
Image.blend(im1,im2,alpha) 

其中Image.blend(im1,im2,alpha)将两幅图片im1和im2按照如下公式插值后生成新的图像: im1 * (1.0-alpha) + im2 * alpha

PIL库的ImageFilter类和ImageEnhance类提供了过滤图像和增强图像的方法,共10种:

ImageFilter.BLUR    #图像的模糊效果
ImageFilter.CONTOUR     #图像的轮廓效果
ImageFilter.DETAIL    #图像的细节效果
ImageFilter.EDGE_ENHANCE    #图像的边界加强效果
ImageFilter.EDGE_ENHANCE_MORE    #图像的阈值边界加强效果
ImageFilter.EMBOSS    #图像的浮雕效果
ImageFilter.FIND_EDGES    #图像的边界效果
ImageFilter.SMOOTH     #图像的平滑效果
ImageFilter.SMOOTH_MORE    #图像的阈值平滑效果
ImageFilter.SHARPEN     #图像的锐化效果

ImageEnhance类提供了更高级的图像增强需求,它提供调整色彩度、亮度、对比度、锐化等功能:

ImageEnhance.enhance(factor)    #对选择属性的数值增强factor倍
ImageEnhance.Color(im)    #调整图像的颜色平衡
ImageEnhance.Contrast(im)    #调整图像的对比度
ImageEnhance.Brightness(im)    #调整图像的亮度
ImageEnhance.Sharpness(im)    #调整图像的锐度

获取缩略图

from PIL import Image
im = Image.open("C:\\bachongying.jpg")
im.thumbnail((128,128))
im.save('1bachongying.jpg')

获取图片轮廓

from PIL import Image
from PIL import ImageFilter
im = Image.open("C:\\bachongying.jpg")
om = im.filter(ImageFilter.CONTOUR)
om.save('bachongying2.jpg')

  图片浮雕化

from PIL import Image
from PIL import ImageFilter
im = Image.open("C:\\bachongying.jpg")
om = im.filter(ImageFilter.EMBOSS)
om.save('bachongying3.jpg')

做一幅中文字符画

from PIL import Image
ascii_char  = list('学习使我快乐')
def get_char(r, b, g, alpha=256):
    if alpha == 0:
        return ' '
    gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
    unit = 256 / len(ascii_char)
    return ascii_char[int(gray//unit)]
def main():
    im = Image.open('C:\\bachongying.jpg')
    WIDTH, HEIGHT = 100, 60
    im = im.resize((WIDTH, HEIGHT))
    txt = ""
    for i in range(HEIGHT):
        for j in range(WIDTH):
            txt += get_char(*im.getpixel((j, i)))
        txt += '\n'
    fo = open("pic_char.txt","w")
    fo.write(txt)
    fo.close()
main()

 

猜你喜欢

转载自www.cnblogs.com/lulingboke/p/12702692.html