毕设需要制作一批压缩的图像,要求用jpeg压缩,保持分辨率不变,在这里我用的是PIL库中所包含的Image包。
先上压缩代码
import os
from PIL import Image
import threading
import time
def imgToProgressive(path):
# if path isn't a image file,return
if not path.split('.')[-1:][0] in ['png', 'jpg', 'jpeg']:
return
if os.path.isdir(path):
return
# transform img to progressive
img = Image.open(path)
destination = path.split('.')[:-1][0] + \
'_destination.'+path.split('.')[-1:][0]
try:
print(path.split('\\')[-1:][0], '开始转换图片')
img.save(destination, "JPEG", quality=20,
optimize=True, progressive=True) # 转换就是直接另存为
print(path.split('\\')[-1:][0], '转换完毕')
except IOError:
Image.ImageFile.MAXBLOCK = img.size[0] * img.size[1]
img.save(destination, "JPEG", quality=20,
optimize=True, progressive=True)
print(path.split('\\')[-1:][0], '转换完毕')
print('开始重命名文件')
os.remove(path)
os.rename(destination, path)
for d, _, fl in os.walk(os.getcwd()): # 遍历目录下所有文件
for f in fl:
try:
imgToProgressive(d+'\\'+f)
except:
pass
这一部分只能压缩同一个文件夹下的图片,而原始数据集的分布是这样的
文件夹套文件夹,每一个文件夹里还有若干图片
因为每个图片的清晰度不同,我需要要将每一个子文件夹里面的图片进行压缩,所以先写一个脚本遍历每个子文件夹的图片,只选取第一张,再遍历外面的大文件夹。
我的代码被误删了可恶!!!!!等有时间补上吧
最后选取的图片如下: