python第三方库pil介绍_[python]常见第三方模块之PIL

恩 其实最近都有看python 但是总是写不出一篇笔记

然而 不写不行了啊!!!

所以有了它

首先,python3下载的是pillow不是PIL,因为PIL不支持

对于import只能导入PIL的我的理解:

我先查了一下pillow的位置

/usr/local/lib/python3.6/site-packages

看了一下里面的东西,似乎是明白了

pillow是PIL基础上产生的安装包名,但他产生的仍然是名为PIL的文件夹,即包(python模块)名

import的只可以是pip下载的默认文件夹中的包名 所以只能import PIL

安装要打pillow则是因为在wheel等包管理工具中是这个名字

而这个默认文件夹路径是怎么确定的我查了很久感觉路径应该在某个py文件中 但我还没找到 只查到了一个叫做virtualenv的东西,在教程PIL下面一章有说,但我觉得不是我要找的就没看

所以安装的方法虽然是pillow 但我们在导入的时候需要导入的是安装后产生的包名,我们需要到自己的默认下载路径去查看叫什么。其他的安装包也是如此。

然后再开始我的表演

图片的缩放

教程中的代码如下

from PIL import Image

im = Image.open('test.jpg’)

w, h = im.size

im.thumbnail((w//2, h//2))

im.save('thumbnail.jpg', 'jpeg') ```

1.open方法可以让图片变成PIL图片文件,即此时的im是一个PIL图像文件

im

```

这里有点奇怪的是,每一次导入内存位置都会改变,而不像数据,导入后就在一个固定位置。

2.thumbnail()方法:产生一个缩略图,后面的参数是图片大小

3.save()方法中,后面的参数没用吧??不管改成什么,图像格式只和前面的后缀名保持一致啊,不过文件大小倒是被改变了

我觉得大概是会转成后面的后缀名的文件,然后再根据图片名后面的后缀给再次改掉了格式,所以大小会变。

模糊效果

from PIL import Image, ImageFilter

im = Image.open('test.jpg')

im2 = im.filter(ImageFilter.BLUR)

im2.save('blur.jpg')

其中ImageFilter应该是存了各种图片滤镜的函数的包

方法为filter()

ImageFilter.BLUR为模糊方法

另外,convert() 方法实现颜色转换

convert('L') 变成黑白的图像

批量转换图像格式

这里用到了OS模块,所以去做了一下功课,之后应该也会写一个专门关于这个的笔记

OS模块简单的来说可以处理文件和目录这些我们日常手动需要做的操作

从文件名列表中读取所有的图像文件,并转换成 JPEG 格式

这是教程的代码:

from PIL import Image

import os

for infile in filelist:

outfile = os.path.splitext(infile)[0] + ".jpg"

if infile != outfile:

try:

Image.open(infile).save(outfile)

except IOError:

print "cannot convert", infile```

`os.path.splitext(path) `分离文件名与扩展名,默认返回(文件名,拓展名) 元组,可做分片操作,就是加一个后缀名输出,和前面的原理一样

但是这里的filelist如何指定呢?

我的问题就在于:如何把一个目录赋值给一个变量?

`os.listdir('dirname') `列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印

于是我尝试:

test = os.listdir('/Users/apple/Desktop/python/test')

test

['1.jpeg', '22.jpeg', 'aaa.jpg', 'abc', 'bbb', 'ccc.jpg', 'test.jpeg', 'thumbnail.jpg’]```

似乎是可以

但是 然而 可是

>>> for infile in test:

... outfile = os.path.splitext(infile)[0] + ".jpg"

... if infile != outfile:

... try:

... Image.open(infile).save(outfile)

... except IOError:

... print("cannot convert", infile)

...

cannot convert 1.jpeg

cannot convert 22.jpeg

cannot convert abc

cannot convert bbb

cannot convert test.jpeg```

去掉错误调试看看是什么错,显示

`FileNotFoundError: [Errno 2] No such file or directory: '1.jpeg’`

文件找不到,一定是因为文件前面得加上路径

真不知道教程的代码是怎么写的,一点都不清楚哼!

还好我机智啊!!用一个列表生成器

test = [os.path.join('/Users/apple/Desktop/python/test',f) for f in os.listdir('/Users/apple/Desktop/python/test’)]````

注意路径path得加引号

这下总可以了吧!!

恩 看一下目录 good 成功啦!!

你可能感兴趣的:(python第三方库pil介绍)