用python PIL库进行图片处理时遇到的问题

先上代码,代码是廖雪峰python学习官网上的,有兴趣可百度搜索。

# coding:utf-8
from PIL import Image

#打开一个jpg图像文件
im = Image.open('E:/MyDownloads/Leslie.jpeg')
#获得图像尺寸
w,h = im.size
#缩放到50%:
im.thumbnail((w//2,h//2))
#把缩放后的图像用JPEG格式保存
im.save('C:/Workspace/thumbnail_Leslie.jpeg','jpeg')

第一点,只要是有中文注释的,开头两行都必须加上编码说明,#coding:utf-8,不然cmd运行时会报错,提示没有解码声明。

第二点,导入库文件的时候如果只是写:import Image,会报错提示ImportError:no module named Image。要说明是从哪个库文件里面导入的:from PIL import Image,这样声明就不会出现问题。我看别人在linux下这样声明没有问题,我用的windows 7 ,不可以。

第三点,写文件路径时要用左斜杠,不能用反了写成右斜杠,不然会报错,找不到文件或路径。E:/MyDownloads/Leslie.jpeg,这样可以,E:\MyDownloads\Leslie.jpeg这样不行。

第四点,文件类型。如这一句im = Image.open(‘E:/MyDownloads/Leslie.jpeg’),我刚开始写的是Leslie.jpg,我以为和Leslie.jpeg没有什么区别,这样写也可以,但是运行的时候报错:
用python PIL库进行图片处理时遇到的问题_第1张图片
提示没有这个文件或者路径。我仔细核对了下,发现路径和拼写没有什么问题,在网上搜了下也没找到类似的问题和答案。看到代码中的’jpeg’这个,想到会不会是文件格式的问题,于是将Leslie.jpg改成了Leslie.jpeg,然后保存再次运行,通过了,程序正常执行。
这里写图片描述
在网上找了下JPG和JPEG的区别,都说没什么区别,然后我改了下

# coding:utf-8
from PIL import Image

#打开一个jpg图像文件
im = Image.open('E:/MyDownloads/timg.jpg')
#获得图像尺寸
w,h = im.size
#缩放到50%:
im.thumbnail((w//2,h//2))
#把缩放后的图像用JPEG格式保存
im.save('C:/Workspace/timg1.jpg','jpg')

找了一张JPG格式的图片,把代码im.save(‘C:/Workspace/timg1.jpg’,’jpg’)里的’jpeg’也改成了’jpg’。试了下,不行
用python PIL库进行图片处理时遇到的问题_第2张图片
跟据里面的路径,找到了Image.py文件,打开文件在里面发现了这样一行代码: “from . import JpegImagePlugin”,导入的插件是JPEG的插件,所以只能以JPEG的方式解码,所以声明‘jpg’会报错。然后把代码再改了下:im.save(‘C:/Workspace/timg1.jpg’,’jpeg’),解码方式声明为’jpeg’,再运行,通过。
总结:不管你是打开.jpeg文件还是打开.jpg文件,这两个的解码方式都是一样的,因为都是使用的JPEG的压缩方式。之所以会出错,是因为写文件名的时候文件格式没有写清楚。如果图片文件是JPEG格式的,后缀名一定要写成.jpeg,比如Leslie.jpeg,如果写成Leslie.jpg,就会出错,.jpg格式的图片文件也是同样的道理。就这么多了。

Time flies.
See you!

你可能感兴趣的:(python)