这个强大的图片处理库我学定了
今天给大家介绍一个好玩的图片处理库——pillow。
安装
直接打开cmd输入pip install pillow即可。
显示图片
因为我想让图片直接在程序下面显示,这样看起来比较舒服,所以我就使用了jupyter。
下面来看看显示图片的方法。

可以看到,代码结构非常简单,轻轻松松就把一张图片给显示出来了,还可以看到图片的分辨率。
分辨率
获取图片分辨率
虽然我们可以从图中看到图片的粗略分辨率,但是如果要准确获取图片的分辨率,我们可以使用图片的size属性

符合上面图片的结果
改变图片的分辨率

像素
获取像素
方法一
为了获取某点的像素,我们可以使用getpixel方法,还是以上面那个图为例,中间部分为白色,所以像素应该接近(255,255,255),我们来看看结果

结果正如我们所料,因为图片是jpg格式,没有透明通道,如果是png格式,则存在透明通道。
方法二
另外,我们还可以使用一种更简洁的方法来获取像素,那就是load方法

改变像素
有了上面的知识,我们就可以暴力地把上面图片的白色区域全部变为红色。

图中有些白色没有变为红色,这是因为有些区域的RGB值并不是(255,255,255),如果要把所有白色区域都变为红色,把RGB值中R、G、B的值都大于220(大概而已)的地方改为(255,255,255)即可,这个很简单,我就不演示了。效果是这样

模式变换
上图的模式为'RGB',如果要换为其它的模式,如灰度'L',四通道'RGBA'等等,可以使用convert方法
灰度

可以看到,现在的像素值不再是一个元组,而是一个整数,因为它是单通道的,数值从0到255,数字越大,颜色越浅。
RGBA
同样的方法,可以把模式变为四通道'RGBA',分别代表红、黄、蓝和透明通道,A的值也是从0到255,数字越大越不透明。

虽然说图像没有发生变化,但是它的像素值却增加了透明通道,我们现在可以把它变透明,来看一下

当然,这只是半透明,不是完全透明,要不就看不到了。我觉得这个很有用,比如你想要弄一个圆形图像,但是很少有圆形截图,这时候你可以截一个方形图,然后把圆外的像素变为透明就可以了。而且,进击的小球那个游戏的棒的背景我也是用这个方法把它变透明的哦。
旋转和翻转
旋转
这个简单,不多说了,看图,注意是逆时针。

翻转
水平翻转

垂直翻转

裁剪
裁剪使用的是crop方法,它接收一个元组,元组有四个参数,前两个参数为要裁剪的图片的左上角坐标,后两个参数表示右下角坐标。理清了这个思路之后,我们来把那只长颈鹿给裁剪出来
上面的图片的大小是1024×719,而长颈鹿左上角的位置大概是(737,320),右下角为(1017,710),故代码为

哈哈,一直可爱的长颈鹿跃然纸上。
复制粘贴

保存图片
这个很简单,就不多说了。
img.save(path)
