python手记(四):pillow(一) Image类简单图片处理

人生不易且无趣,一起找点乐子吧。欢迎评论,和文章无关的也可以。

 

 

 

(写个新的系列,图片处理。名字是很高级,但是我们能做的很low,先打个预防针,别充满期望。不然会很难过......)

(你可以弄个相册啊,什么的。自己用代码处理处理发给女朋友。处理有风险,发图需谨慎,可能会让你再次恢复单身的贤者模式......)

(看完这个系列的东西,对于一些简单的图片处理就不需要再继续依赖于一些软件,自己搞搞就可以,看完这个系列,你能干什么?玩!嗯,也就停留在这个阶段了,哈哈,开始吧。)

我们知道python中有一个专门用来做图片处理的第三方库,PIL(python image library)。里面的类也好多,今天我们简单来说说他的其中一个最简单的类,Image。(对图片的基本操作,打开存储等,类比文件的打开、读取、保存就可以了。)

说下安装,虽然库的名字叫PIL,但是如果你pip的话,要pip install pillow。

算了,这些去查查就知道了。直接“审视”这个类吧。

首先最基本的:

一、Image.open()

Image.open()

参数是图片的相对路径,有点像文件的open方法,没什么不同之处。open方法会返回一个Image对象,这个对象还有自己的一些属性:format,size,mode等。可以用来查看图片的相关信息。

类似于这样:

python手记(四):pillow(一) Image类简单图片处理_第1张图片

属性的内容大家一看就知道吧。

二、对象的show方法:

当得到Image对象,我们就可以用im.show()来查看,自我感觉这个东西是没有用的哈,他会调用你计算机上的看图工具然后把它打开。(自行忽略......Let it go.)

三、对象的save方法:

当我们把一张图片处理完,我们就可以另存为另一个图片了。

im.save('2.jpg','JPEG')

首参是另存为的名字,后面的参数是保存格式(可省略,默认与原图相同)。

这里谈一下图片格式的转化。我们知道,图片的格式有很多,jpg,gif,PDF,png,bmp等等。其实之所以会分这么多的类别,原因就是他们的存储方式的不同,这也就是为什么我们有时候手动修改图片的扩展名,图片不能正常显示的原因。举个例子,比如我的一张图片是gif,你把扩展名改成了jpg。那么原来这张按gif的格式存储的图片,你现在要按jpg的方式读取,当然就有可能出错。

这时你就可以用Image的save方法尝试着去把图片改成你想要的格式。

四、thumbnail方法:

Image对象的其中一个方法,thumbnail。是,缩略图。我觉得这个大家应该能用到的不多。我们知道,当我们浏览网页时,会有许多的图片产生。我们也知道,图片相对文字,是要大很多的。(遥想公瑾当年......,不是啊,就前几年),你每次打开网页,屏幕上有个自动的“贪吃蛇”转圈的图标,盯上半个小时,“蛇”还在追他的尾巴。其实有些网页上会采用缩略图,因为它存储小,读取快,能更快地让用户接收到图片,不至于转半天图片没出来,去喷网络体验差。

使用的方法很简单:

im.thumbnail(size)

参数是大小,是个tuple类型,这个我不需要过多解释吧。im.thumbnail((200,200))。记得最后保存的时候,扩展名是.thumbnail。

五、crop方法:

这个也是对象的方法,如果你去百度翻译,应该能查出来个“收割”的意思,我觉得你就理解成剪切吧。这样好理解些。

    box=(100, 100, 200, 200)#左 上 右 下
    im = Image.open(file)
    region = im.crop(box)

 

参数很有趣,还是个tuple类型。因为是剪切嘛,所以你要指定剪切的位置,是个矩形。我们知道图片的左上角是(0,0)原点位置,向右和向下分别是x,y的正方向。

我这里用了张白血球的图片,应该不会侵权吧:

python手记(四):pillow(一) Image类简单图片处理_第2张图片

假如我们想要剪切头的那部分,那就需要我们把参数矩形的参数写出来,分别是矩形的左边所对x轴,上面所对y,右面所对x,下面所对y。或者简单点,你的参数就是矩形的左上和右下的(x,y)坐标。

我这里测试了下;

python手记(四):pillow(一) Image类简单图片处理_第3张图片

差不多就是酱紫。(我没有想到白血球会死在我的键盘下)

六、paste方法:

对,就当粘贴就可以了(如果你没有明白这句话里“对”的含义,那我想你肯定不明白什么叫做“英语”)。来看下使用方法:

    box=(100, 100, 200, 200)#左 上 右 下
    region = im.crop(box)
    im.paste(region,box)

 

假如说我们现在有了image对象im,还有刚刚剪切下来的image对象region。我们想把region贴到另一张图的某个位置。就可以用paste了。参数分别是,要粘贴的image对象,还有粘贴位置。这里要注意的是参数box的设置和上面一样,但是box矩形的大小,一定要和你粘贴的region相同,不然会出错。

python手记(四):pillow(一) Image类简单图片处理_第4张图片

像这样,因为后面那张图不太和谐,我就顺便用它挡住吧,充当马赛克了。(白血球我对不起你!)

七、resize方法:

这个就很简单了,就是修改图片的大小,直接用image对象的resize方法就好,参数仍旧是个tuple类型。标识长宽(像素)。也就是我们平常看到的图片大小:num x num

    out = im.resize((2000,1250))
    out.save('resize.jpg')

 

八、rotate方法:

旋转、跳跃、你闭着眼~。这个方法也很简单,望文生义就好了,就是起个旋转的功能。

你觉得很垃圾?随便的手机都可以?你错了,他的旋转不像手机那样只是给你换个观察视图,直接看图吧,不解释(嗷~抱歉,这里不是傲气,是无能为力,解释不清......):

python手记(四):pillow(一) Image类简单图片处理_第5张图片

    im = Image.open(file)
    out = im.rotate(45)
    out.save('rotate.jpg')

参数是旋转度数,逆时针。

 

九、transpose方法:

这个包含着rotate的方法,功能又强大了几分。

    im = Image.open(file)
    #out = im.transpose(Image.FLIP_LEFT_RIGHT)
    out = im.transpose(Image.FLIP_TOP_BOTTOM)
    out.save('transpose.jpg')

来看看两种不同的展示吧:

python手记(四):pillow(一) Image类简单图片处理_第6张图片

这个可不是旋转180度哦,这个是上下颠倒。你懂我意思吧。(水中的倒影~~~  这个解释好)

第二种:

python手记(四):pillow(一) Image类简单图片处理_第7张图片

这个也就不需要解释了吧。(镜中人?不确切......)

transpose的参数还有很多,我这里举了两个好展示的例子,其他大家想玩的查一查就出来了。

十、convert方法:

这个有趣,简单说就是,彩电变黑白。(一键回到 jie fang 前【这里我怕敏感词啦~~~~不是我不会写!!!】)

    im = Image.open(file).convert('L')
    im.save("L.jpg")

参数L是个类似灰度的东西。嗯,这个无所谓啦。看效果:

python手记(四):pillow(一) Image类简单图片处理_第8张图片

遗照般的存在。(白血球!!!!!)

十一、merge方法:

这个有些难理解,简单说下,我们知道大部分的图片是RGB形式的,(red,green,blue),图片的每个像素点呢,是由这三种颜色的不同量度来“调和”的,我这样说准确吗?每个色的取值范围是0~255.比如如果一个颜色是(255,0,0),那这个颜色就是红色。相应的green,blue类比就是了。如果是(255,255,255)那就是白色,(0,0,0)黑色。其他颜色也都是色素量值的不同罢了,这里当小科普吧。还有format是RGBA,多了一个维度,A是什么呢。他叫不透明度。注意“不”,也就是说如果A是255,那他和RGB没啥区别。如果是0,那就看不见了。如果是一半的数值,他就会是那种若隐若现的透明感。(你不在我不在,不知谁还在那种~)

好了我们说回来merge,翻译是合并,嗯,就意会吧。你直接用艺术的手段理解成“调色”也可以(笑)。

def merge(file):
    im = Image.open(file)
    r,g,b = im.split()
    im = Image.merge('RGB',(b,g,r))
    im.save('merge.jpg')

 

我这里写个类来说明用法,顺便说个split方法。这个东西大家应该常常用到,分割符嘛。经常用来分割字符串,来获得内部的值,这里也差不多。因为分割的是图片,这里分离出来的,你就当成RGB那三原色,分别赋值给rgb三个变量。

我们再看merge方法。他是Image类的方法,所以我说就把他理解成填充也是可以的,首参是图片格式,后面的tuple参数是格式对应的值,这里我们看下,我们的赋值是(b,g,r)。什么意思呢?对,也就是说,我们把图片里的原来用红色的地方,现在用b蓝来填充。原来蓝的地方呢,就用r红来填充。

有趣,看看效果:

python手记(四):pillow(一) Image类简单图片处理_第9张图片

鬼魅般的颜色。如果你对颜色的调配很了解,那就自己试着去玩玩看吧,没准能搞出自己的风格。

哈哈。

 

 

ok,Image类差不多介绍完了。后面的其他PIL的类,也会慢慢的写,我也是在一点点的学,欢迎大家交流。

 

 

 

后记:

括号内的内容是第二遍查看的时候添加,只为引起你阅读时的极度舒适。

(预知后事如何,且听下回分解。)

(下集见,不是,下篇文章见。)

你可能感兴趣的:(python手记)