我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python批量压缩图像的完整步骤是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python批量压缩图像的完整步骤是什么

这期内容当中小编将会给大家带来有关python批量压缩图像的完整步骤是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

    背景

    今天在工作中,同事遇到一个上传图片的问题:系统要求的图片大小不能超过512KB。但是同事又有很多照片。这要是每一个照片都用ps压缩的话,那岂不是很崩溃。于是我写了一个脚本,可以批量压缩图片到指定大小。直接造福同事、提高同事的工作效率。

    解决方案

    其实也不用卖关子了,就是使用python的pillow包就可以对图片进行压缩,如果一个图片已经压缩到指定大小了,那就停止压缩,如果没有达到指定大小,那就对压缩后的图片再进行压缩,直到压缩到自定范围内。

    可是为什么不在网上找代码呢?我也是找过,但是发现很多代码质量参差不齐,都达不到我想要的效果,而且很不优雅。于是我随手就写了一个代码,不仅仅代码写的简单,而且逻辑清楚,最后为了效率,我还做了一个并行,同时使用10个进程处理。说实话,那可是真的飞快。

    操作步骤

    要求

    • 默认是使用的是Anaconda的环境。

    • 将所有要压缩的图片都放在一个文件夹下,然后每个图片的格式只能是下面三种:png,jpg, jpeg。如果是PNG也不行。因为PNG是png的大写。

    • 代码中设置的图像的压缩后的大小是512KB,那么你可以设置代码中的target_size为500,只要比512KB小就行了。

    • 然后把我的代码从GitHub上下载下来。代码链接为:https://github.com/yuanzhoulvpi2017/tiny_python/blob/main/image_compression/ic.py

    步骤

    我这里把所有图片都放在了一个文件夹里面,文件夹名称为历史截图。然后我的这个历史截图和ic.py代码都放在了little_code文件夹中。

    python批量压缩图像的完整步骤是什么

    在little_code文件夹下,打开终端。

    python批量压缩图像的完整步骤是什么

    直接运行的脚本:

    python ic.py xxx_文件夹

    等待一会,就会将整个文件夹下的所有图片都转化好了。

    python批量压缩图像的完整步骤是什么

    完整代码:

    如果上不去GitHub的话,我直接把代码放在这里,保存为一个python文件即可。比如保存的文件名为:ic.py

    from PIL import Imagefrom glob import globimport osfrom tqdm import tqdmimport shutilimport sysfrom itertools import chainfrom multiprocessing import Pool# image_dir = "image_dir"template_dir = 'template'output_dir = 'output'error_dir = 'error'def clean_dir(dir_name):    if os.path.exists(dir_name):        shutil.rmtree(dir_name)        os.makedirs(dir_name)    else:        os.makedirs(dir_name)# image_file_list = glob(f"{image_dir}/*")# image_file_listdef imagesize(filepath):    """    获得文件的磁盘大小    :param filepath:    :return:    """    return os.path.getsize(filepath) / 1024def compress_image(image_path):    raw_image = Image.open(image_path)    temp_image_name = image_path.split(os.sep)[-1]    template_image = os.path.join(template_dir, temp_image_name)    output_image = os.path.join(output_dir, temp_image_name)    error_image = os.path.join(error_dir, temp_image_name)    target_size = 500  # kb    try:        if imagesize(image_path) < target_size:            shutil.copyfile(image_path, output_image)        else:            width, height = raw_image.size            raw_image.resize((int(width * 0.9), int(height * 0.9)), Image.ANTIALIAS).save(template_image)            while imagesize(template_image) > target_size:                template_iamge2 = Image.open(template_image)                width_2, height_2 = template_iamge2.size                template_iamge2.resize((int(width_2 * 0.9), int(height_2 * 0.9)), Image.ANTIALIAS).save(template_image)            shutil.copyfile(template_image, output_image)    except Exception as e:        shutil.copyfile(image_path, error_image)        print(f'文件保存失败: {image_path}')        # print(e)if __name__ == '__main__':    # 批量创建文件夹    [clean_dir(i) for i in [template_dir, output_dir, error_dir]]    image_dir = sys.argv[1]    image_file_list = list(chain(*[glob(os.path.join(image_dir, i)) for i in ['*.png', '*.jpg', '*.jpeg']]))    # for temp_image_path in tqdm(image_file_list):    #     compress_image(temp_image_path)    print(f'\n\n文件保存父目录: {os.getcwd()}\n'          f'输出文件位置:{os.path.join(os.getcwd(), output_dir)}\n\n')    # parallel    P = Pool(processes=10)    pbar = tqdm(total=len(image_file_list))    res_temp = [P.apply_async(func=compress_image, args=(i,), callback=lambda _: pbar.update(1)) for i in                image_file_list]    _ = [res.get() for res in res_temp]

    附:批量将图片的大小设置为指定大小

    import osfrom PIL import Image # 源目录project_dir = os.path.dirname(os.path.abspath(__file__))input = os.path.join(project_dir, 'class="lazy" data-src') # 输出目录output = os.path.join(project_dir, 'dest')def modify():    # 切换目录    os.chdir(input)     # 遍历目录下所有的文件    for image_name in os.listdir(os.getcwd()):        print(image_name)        im = Image.open(os.path.join(input, image_name))        im.thumbnail((128, 128))        im.save(os.path.join(output, image_name)) if __name__ == '__main__':    modify()

    上述就是小编为大家分享的python批量压缩图像的完整步骤是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    python批量压缩图像的完整步骤是什么

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    python批量压缩图像的完整步骤是什么

    这期内容当中小编将会给大家带来有关python批量压缩图像的完整步骤是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。背景今天在工作中,同事遇到一个上传图片的问题:系统要求的图片大小不能超过512KB。
    2023-06-22

    Java图片批量压缩像素的实现方法是什么

    Java图片批量压缩像素的实现方法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。图片压缩大法为了防止用户流量的丢失,即使在5g 即将来临的情况下,压缩算法
    2023-06-22

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录