全校网站建设与管理,一般做网站所使用的字体,承德网站,wordpress改登录路径1、介绍
在办公还是学习过程中#xff0c;难免会遇到上传照片的问题。然而照片的大小限制一直都是个问题#xff0c;例如照片限制在200Kb之内#xff0c;虽然有很多图像压缩技术可以实现#xff0c;但从图像处理的专业来说#xff0c;可以利用代码实现 这里使用的库函数是…1、介绍
在办公还是学习过程中难免会遇到上传照片的问题。然而照片的大小限制一直都是个问题例如照片限制在200Kb之内虽然有很多图像压缩技术可以实现但从图像处理的专业来说可以利用代码实现 这里使用的库函数是python的PIL库Pillowpillow安装命令如下
pip install pillow这里使用PIL.Image.save()方法内部使用压缩算法对图片进行的压缩处理。
form PIL import Image
img Image.open(demo.jpg)
img.save(img_name, quality95)quality参数 保存图像的质量值的范围从1最差到95最佳 默认值为75。 值如果高于100会禁用部分JPEG压缩算法并导致大文件图像质量几乎没有任何增益。 提示subsampling参数子采样通过实现色度信息的分辨率低于亮度信息来对图像进行编码的实践。可以配合quality使用具体实现可以自己上网查询 2、压缩单张图片
代码如下因为保存需要文件名不同的图片后缀啊、名称啊各不相同这里简单提供了一个也可以直接在img.save 里面自己指定
from PIL import Imagedef main(img_path):ret_path img_path.split(.jpg)[0] # .jpg 根据后缀更改ret_path ret_path _result.jpg # 返回的图片名img Image.open(img_path)img.save(ret_path,quality15)if __name__ __main__:root test.jpg # 传入图片的路径main(img_pathroot)效果展示 一般quailty 值放到30-45就差不多了图片质量看不出啥区别 3、多张图片压缩单个文件夹
如果压缩多张图片的话直接把图片放在同一个文件夹目录下即可 这里的测试代码demo.py和测试文件夹(demo)在同一级路径或者指定路径也行 代码差不多这里不介绍直接展示了 这里会返回新的目录不会改变图片的文件名或者后置 如果不满意压缩结果这样多次运行程序会自动将之前的结果替换
from PIL import Image
import os
from tqdm import tqdmdef main(folder_path):ret_folder_path folder_path _ret # 返回父目录if not os.path.exists(ret_folder_path): # 建立目录os.makedirs(ret_folder_path)img_path [i for i in os.listdir(folder_path)] # 所有图片路径for i in tqdm(img_path):img os.path.join(folder_path,i)img Image.open(img) # 打开图片img.save(os.path.join(ret_folder_path,i),quality15)if __name__ __main__:root ./demo # 多个图片的父目录main(folder_pathroot)运行过程 结果 这里的图片肉眼看不出区别就不展示了 4、 多个文件夹的图片压缩
如果有多个文件夹每个文件夹下都有图片的话可以新建个父目录将所有文件夹放进去 代码类似的这里直接展示 这里会返回新的目录不会改变子文件夹的名称或者图片的名称和后缀 如果不满意压缩结果需要将返回的父目录删除否则会报错
from PIL import Image
import os
from tqdm import tqdmdef main(folder_path):ret_folder_path folder_path _ret # 返回父目录if not os.path.exists(ret_folder_path): # 建立目录os.makedirs(ret_folder_path)sub_folder_path [i for i in os.listdir(folder_path)] # 次级目录for i in sub_folder_path: # 遍历次级目录os.makedirs(os.path.join(ret_folder_path,i)) # 建立子目录for j in tqdm(os.listdir(os.path.join(folder_path,i)),desci): # 遍历当前次级目录的所有图片img_path os.path.join(folder_path,i,j) # 图片路径img Image.open(img_path)img.save(os.path.join(ret_folder_path,i,j),quality15)if __name__ __main__:root ./demo # 父目录main(folder_pathroot)运行过程 结果 压缩的图片和之前的看不出啥区别就不展示了