Pillow
安装
$ pip install pillow
缩放 resize
from PIL import Image im = Image.open("xiao.png") print(im.size) # 获取图片尺寸 im_resize = im.resize((256,256)) print(im_resize.size) 输出: (670, 502) (256,256)
注:resize方法有参数filter。不赋值的话,resize()默认使用NEAREST滤波器
PIL提供了4中采用滤波器
NEAREST:最近滤波。从输入图像中选取最近的像素作为输出像素。它忽略了所有其他的像素。 BILINEAR:双线性滤波。在输入图像的2x2矩阵上进行线性插值。注意:PIL的当前版本,做下采样时该滤波器使用了固定输入模板。 BICUBIC:双立方滤波。在输入图像的4x4矩阵上进行立方插值。注意:PIL的当前版本,做下采样时该滤波器使用了固定输入模板。 ANTIALIAS:平滑滤波。这是PIL 1.1.3版本中新的滤波器。对所有可以影响输出像素的输入像素进行高质量的重采样滤波,以计算输出像素值。在当前的PIL版本中,这个滤波器只用于改变尺寸和缩略图方法。 注意:在当前的PIL版本中,ANTIALIAS滤波器是下采样(例如,将一个大的图像转换为小图)时唯一正确的滤波器。BILIEAR和BICUBIC滤波器使用固定的输入模板,用于固定比例的几何变换和上采样是最好的。
Image模块模块
Image模块是PIL中最重要的模块,它有一个类叫做image,与模块名称相同。Image类有很多函数、方法及属性,接下来将依次对image类的属性、函数和方法进行介绍。
一、Image类的属性
1、Format
定义:im.format ⇒ string or None 含义:源文件的文件格式。如果是由PIL创建的图像,则其文件格式为None。 例子: from PIL import Image im= Image.open("xiao.png") print(im.format) 输出: 'png'
2、Size
定义:im.size ⇒ (width, height)
含义:图像的尺寸,按照像素数计算。它的返回值为宽度和高度的二元组(width, height)。
二、类的函数:
1、Open
定义:Image.open(file) ⇒ image Image.open(file, mode) ⇒ image 含义:打开并确认给定的图像文件。这个是一个懒操作;该函数只会读文件头,而真实的图像数据直到试图处理该数据才会从文件读取(调用load()方法将强行加载图像数据)。如果变量mode被设置,那必须是“r”。 用户可以使用一个字符串(表示文件名称的字符串)或者文件对象作为变量file的值。文件对象必须实现read(),seek()和tell()方法,并且以二进制模式打开。 例子: from PIL import Image im = Image.open("xiao.png")
三、Image类的方法
除非另作说明,Image类的所有方法都将返回一个Image类的新实例,这个实例对应于结果图像。
1、Convert
定义1:im.convert(mode)⇒ image 含义1:将当前图像转换为其他模式,并且返回新的图像。 当从一个调色板图像转换时,这个方法通过这个调色板来转换像素。如果不对变量mode赋值,该方法将会选择一种模式,在没有调色板的情况下,使得图像和调色板中的所有信息都可以被表示出来。 定义2:im.convert(“P”,**options) ⇒ image 含义2:这个与第一个方法定义一样,但是当“RGB”图像转换为8位调色板图像时能更好的处理。可供选择的选项为: Dither=. 控制颜色抖动。默认是FLOYDSTEINBERG,与邻近的像素一起承担错误。不使能该功能,则赋值为NONE。 Palette=. 控制调色板的产生。默认是WEB,这是标准的216色的“web palette”。要使用优化的调色板,则赋值为ADAPTIVE。 Colors=. 当选项palette为ADAPTIVE时,控制用于调色板的颜色数目。默认是最大值,即256种颜色。 定义3:im.convert(mode,matrix) ⇒ image 含义3:使用转换矩阵将一个“RGB”图像转换为“L”或者“RGB”图像。变量matrix为4或者16元组。
2、Copy
定义:im.copy() ⇒ image 含义:拷贝这个图像。如果用户想粘贴一些数据到这张图,可以使用这个方法,但是原始图像不会受到影响。 例子: from PIL import Image im1 = Image.open("jing.jpg") im2 = im1.copy() im2.save("he.jpg") 注:图像im_copy和im01完全一样。
3、Crop
定义:im.crop(box) ⇒ image 含义:从当前的图像中返回一个矩形区域的拷贝。变量box是一个四元组,定义了左、上、右和下的像素坐标。 这是一个懒操作。对源图像的改变可能或者可能不体现在裁减下来的图像中。为了获取一个分离的拷贝,对裁剪的拷贝调用方法load()。 例子: from PIL import Image im1 = Image.open("jing.jpg") print(im1.size) box = [0,0,650,400] #650(长)400(高) im_crop = im1.crop(box) im_crop.save("he.jpg")
把png图片处理后保存jpg报错
参考: https://blog.csdn.net/weixin_41010198/article/details/87200236
img = Image.open("abc.png") size = img.size # 图片尺寸,元组格式 (180, 180) length = size[0] width = size[1] # 截取4:3尺寸 if (length / width) > (4 / 3): # 长宽比大于1.33333333 length_space = (length - (width / 3 * 4)) / 2 # 左右分割的间距 cropped = img.crop((length_space, 0, length - length_space, width)) # (left, upper, right, lower) else: # 长宽比小于4/3 width_space = (width - (length / 4 * 3)) / 2 # 上下分割的间距 cropped = img.crop((0, width_space, length, width - width_space)) # (left, upper, right, lower) # cropped.save("xxx.jpg") # 当abc为jpg,jpeg格式,不会报错。为png格式会报错,经查询, png图片为四通道RGBA,A代表透明度。如果变为jpg需要转为三通道。 try: # jpg,jpeg三通道图片 cropped.save("xxx.jpg") # 保存截取的图片 except: # 四通道图片 cropped = cropped.convert('RGB') # 例如png,tif这种RGBA4通道图片,要转为转为RGB三通道 cropped.save("xxx.jpg") # 保存截取的图片
全文参考网址:
https://www.cnblogs.com/chimeiwangliang/p/7130434.html