PIL库学习总结&生成略缩图&美白&生成GIF

(一)PIL库学习总结

1)PIL(Python Image Library)库是Python语言的第三方库,需要通过pip工具安装
2)PIL库支持图像存储、显示和处理,它能够处理几乎所有图片格式,可以完成对图像的缩放、剪裁、叠加以及向图像添加线条、图像和文字等操作
3)PIL库可以完成图像归档和图像处理两方面功能需求:
图像归档:对图像进行批处理、生成图像预览、图像格式转换等;
图像处理:图像基本处理、像素处理、颜色处理等
4)PIL库Image类解析
用Image对象表示Image类的图像读取和创建方法:

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

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

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

rotate()方法以逆时针旋转的角度值作为参数来旋转图像

Image.resize(size) 按size大小调整图像,生成副本
Image.rotate(angle) 按angle角度旋转图像,生成副本
8)Image类能够对每个像素点或者一幅RGB图像的每个通道单独进行操作,split()方法能够将RGB图像各颜色通道提取出来

merge()方法能够将各独立通道再合成一幅新的图像

Image.point(func) 根据函数func功能对每个元素进行运算,返回图像副本
Image.split() 提取RGB图像的每个颜色通道,返回图像副本
Image.merge(mode,bands) 合并通道 ,采用mode色彩,bands是新色的色彩通道
Image.blend(im1,im2,alpha) 将两幅图片im1和im2按照如下公式插值后生成新的图像:im1 * (1.0-alpha) + im2 * alpha
9)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 图像的锐化效果
10)ImageEnhance类提供了更高级的图像增强需求,它提供调整色彩度、亮度、对比度、锐化等功能

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

(二)略缩图

(1)略缩图

 1 import os
 2 import glob
 3 from PIL import Image
 4 
 5 def thumbnail_pic(path):
 6     #glob.glob(pathname),返回所有匹配的文件路径列表
 7     a=glob.glob(r'timg.jpg')
 8     for x in a:
 9         name=os.path.join(path,x)
10         im=Image.open(name)
11         im.thumbnail((80,80))
12         print(im.format,im.size,im.mode)
13         im.save(name,'JPEG')
14     print('Done!')
15 
16 if __name__=='__main__':
17     path='.'
18     thumbnail_pic(path)

(2)浮雕

 1 import cv2
 2 import numpy as np
 3 img = cv2.imread('timg1.jpg',1)
 4 imgInfo = img.shape
 5 height = imgInfo[0]
 6 width = imgInfo[1]
 7 gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
 8 dstImg = np.zeros((height,width,1),np.uint8)
 9 # 算法:newPixel = grayCurrentPixel - grayNextPixel + 150
10 for i in range(0,height):
11     for j in range(0,width-1):
12         grayCurrentPixel = int(gray[i,j])
13         grayNextPixel = int(gray[i,j+1])
14         newPixel = grayCurrentPixel - grayNextPixel + 150
15         if newPixel > 255:
16             newPixel = 255
17         if newPixel < 0:
18             newPixel = 0
19         dstImg[i,j] = newPixel
20 cv2.imshow('dstImg',dstImg)
21 cv2.waitKey(0)

PIL库学习总结&生成略缩图&美白&生成GIF_第1张图片

PIL库学习总结&生成略缩图&美白&生成GIF_第2张图片

(3)提取GIF每一帧图片

 1 from PIL import Image
 2 import sys
 3 import os
 4  
 5  
 6 def image_process(gif_path, save_path):
 7     try:
 8         im = Image.open(gif_path)
 9     except IOError:
10         print("Load gif failed")
11         sys.exit(1)
12     cnt = 1
13     mypalette = im.getpalette()   # 调色板
14  
15     try:
16         while True:
17             im.putpalette(mypalette)
18             new_image = Image.new('RGBA', im.size)
19             new_image.paste(im)
20             new_image.save(os.path.join(save_path, str(cnt)+'.png'))
21             cnt = cnt + 1
22             im.seek(im.tell() + 1)
23     except EOFError:
24         pass
25  
26  
27 gif = r'gif.gif'
28 save = r'D:\python\代码\其他\图片'
29 image_process(gif, save)

PIL库学习总结&生成略缩图&美白&生成GIF_第3张图片

(三)美白

 1 from PIL import Image
 2 from PIL import ImageEnhance
 3 import cv2
 4 import numpy as np
 5 
 6 def BrightnessEnhancement(brightness):
 7     '''
 8     # #亮度增强 :brightness在(0-1)之间,新图像较原图暗,在(1-~)新图像较原图亮 ,
 9     # ##brightness=1,保持原图像不变;可自定义参数范围
10     '''
11     image = Image.open(filepath)
12     enh_bri = ImageEnhance.Brightness(image)
13 #brightness =1.5
14     image_brightened = enh_bri.enhance(brightness)
15     image_brightened.show()
16     
17 if __name__ =="__main__":
18     filepath = 'GZT.jpg'
19     #原始图像
20     brightness = 1.5
21     BrightnessEnhancement(brightness)
22     whi = 1.2
23     image =cv2.imread('GZT.jpg')
24     Filter(image)
25     WhiteBeauty(image,whi)

PIL库学习总结&生成略缩图&美白&生成GIF_第4张图片

PIL库学习总结&生成略缩图&美白&生成GIF_第5张图片

(四)产生GIF

1 import imageio, os
2 images = []
3 base_path = r'D:\python\代码\其他\图片\GIF'
4 path = os.listdir(base_path)    # 读取文件夹下的图片
5 filenames = sorted(path, key=lambda x: int(x.split('.')[0]))   # 对文件按照文件名进行排序
6 print(filenames)
7 for filename in filenames:
8     images.append(imageio.imread(os.path.join(base_path, filename)))
9 imageio.mimsave(os.path.join(base_path, 'new.gif'), images, duration=0.01)  # duration设置gif的间隔时间

PIL库学习总结&生成略缩图&美白&生成GIF_第6张图片

 

你可能感兴趣的:(PIL库学习总结&生成略缩图&美白&生成GIF)