import cv2 as cv
import os

#显示图片
def cv_show(name, img):
    cv.imshow(name, img)
    cv.waitKey(0)
    cv.destroyAllWindows()

#得到图片大小
def get_doc_size(path):
    try:
        size = os.path.getsize(path)
        return get_kb_size(size)
    except Exception as err:
        print(err)

#得到具体多少kb
def get_kb_size(bytes):
    bytes = float(bytes)
    kb = bytes / 1024
    return kb

#删除这个路径下的文件
def delete_file(path):
    if file_exist(path):
        os.remove(path)
    else:
        print('no such file:%s' % path)

#通过系统命令判断这个文件是否存在
def file_exist(path):
    return os.path.exists(path)

#设定图片宽为480px,高为640px
def resize_rate(path, resize_path,quality):
    image = read_image(path)
    im_resize = cv.resize(image,(480,640))  #这边修改图片尺寸
    delete_file(resize_path)
    save_image(resize_path, im_resize,quality)


def save_image(path, image,quality):
    cv.imwrite(path, image,[int(cv.IMWRITE_JPEG_QUALITY),quality])


def read_image(path):
    return cv.imread(path)




#这边修改要压缩文件存放的路径
path = "C:/picture/2021.png"
#这边修改压缩后文件存放的路径
resize_path = "C:/picture/2020.jpg"
#这边修改目标压缩大小,单位kb
filesize = 38
#这边修改图片质量
quality = 95

size = get_doc_size(path)
delete_file(resize_path)


while size > filesize:
    if quality >= 60:
        if file_exist(resize_path):
            resize_rate(resize_path, resize_path,quality)
        else:
            resize_rate(path, resize_path,quality)
    else:
        print("压缩后的图片无法满足要求!!!")
        break
    quality = quality-1
    size = get_doc_size(resize_path)

要修改的地方都在代码中解释了,图片质量越低,文件体积越小

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐