图片大小压缩
Created At :
Count:322
Views 👀 :
from PIL import Image import os from multiprocessing.pool import ThreadPool
def get_size(file): size = os.path.getsize(file) return size / 1024
def get_outfile(infile, outfile): if outfile: return outfile dir, suffix = os.path.splitext(infile) outfile = '{}-out{}'.format(dir, suffix) return outfile
def compress_image(infile, outfile='', mb=500, step=10, quality=80): if os.path.exists(outfile): return """不改变图片尺寸压缩到指定大小 :param infile: 压缩源文件 :param outfile: 压缩文件保存地址 :param mb: 压缩目标,KB :param step: 每次调整的压缩比率 :param quality: 初始压缩比率 :return: 压缩文件地址,压缩文件大小 """ o_size = get_size(infile) if o_size <= mb: shutil.copyfile(infile,outfile) return f"cp:{infile}>{outfile}" outfile = get_outfile(infile, outfile) while o_size > mb: im = Image.open(infile) im.save(outfile, quality=quality) if quality - step < 0: break quality -= step o_size = get_size(outfile) return outfile, get_size(outfile)
path_a = r"文件路径" path_b = r"文件路径"
s = ThreadPool(12) for i in os.listdir(path_a): infile = os.path.join(path_a, i) outfile = os.path.join(path_b, i) print(infile) s.apply_async(compress_image, args=(infile, outfile)) s.close() s.join()
|