Python实现图像尺寸和格式转换处理的示例详解

 更新时间:2023年04月04日 16:04:44   作者:飞仔FeiZai  
这篇文章主要为大家详细介绍了如何利用Python实现图像尺寸获取和格式转换处理的功能,文中的示例代码讲解详细,感兴趣的可以了解一下

实现代码

# batch_handle_image.py

import argparse
import glob
import os
from PIL import Image


def main(args):
    limit_shortest = int(args.limitshortest)
    shortest_edge = int(args.shortestedge)
    longest_edge = int(args.longestedge)
    limit_width_or_height = int(args.limitwidthorheight)
    limit_width = int(args.limitwidth)
    limit_height = int(args.limitheight)
    to_webp = int(args.towebp)

    path_list = sorted(glob.glob(os.path.join(args.input, '*')))
    for path in path_list:
        print(path)
        basename = os.path.splitext(os.path.basename(path))[0]

        img = Image.open(path)
        width, height = img.size

        # 限制最长边或最短边
        if limit_shortest == 1:
            # save the smallest image which the shortest edge is shortest_edge
            if width < height:
                ratio = height / width
                width = shortest_edge
                height = int(width * ratio)
            else:
                ratio = width / height
                height = shortest_edge
                width = int(height * ratio)
        elif limit_shortest == 0:
            # save the smallest image which the longest edge is longest_edge
            if width < height:
                ratio = width / height
                height = longest_edge
                width = int(height * ratio)
            else:
                ratio = height / width
                width = longest_edge
                height = int(width * ratio)

        # 限制宽或高
        if limit_width_or_height == 0:
            # 限宽
            ratio = height / width
            width = limit_width
            height = int(width * ratio)
        elif limit_width_or_height == 1:
            # 限高
            ratio = width / height
            height = limit_height
            width = int(height * ratio)

        idx = 0

        rlt = img.resize((int(width), int(height)), resample=Image.ANTIALIAS)
        rlt = rlt.convert('RGB')
        rlt.save(os.path.join(args.output, f'{basename}T{idx+1}.png'), 'PNG')
        if to_webp == 1:
            os.makedirs(os.path.join(args.output, 'to_webp'), exist_ok=True)
            # 转换为 webp 格式图片
            rlt.save(os.path.join(args.output, 'to_webp', f'{basename}T{idx+1}.webp'), 'WEBP')


if __name__ == '__main__':
    """batch modify image size, and convert to webp
    """
    parser = argparse.ArgumentParser()
    parser.add_argument('--input', type=str, default='datasets/MY/YT', help='Input folder')
    parser.add_argument('--output', type=str, default='datasets/MY/YT_smallsize', help='Output folder')
    # 是否限制最短边开关:0-限制最长边;1-限制最短边;2-不限制
    parser.add_argument('--limitshortest', type=str, default='2', help='0-limit longest; 1-limit shortest; 2-not limit')
    # 设置最短边数值
    parser.add_argument('--shortestedge', type=str, default='500', help='shortest edge size')
    # 设置最长边数值
    parser.add_argument('--longestedge', type=str, default='2000', help='longest edge size')
    # 是否转换 webp 格式图像开关:0-不转换;1-转换
    parser.add_argument('--towebp', type=str, default='0', help='is convert to webp, 0-false, 1-true')
    # 是否限制宽度或高度数值开关
    parser.add_argument(
        '--limitwidthorheight',
        type=str,
        default='2',
        help='is limit width or height; 0-limit width; 1-limit height; 2-not limit')
    # 限制宽度数值,高度按比例计算
    parser.add_argument('--limitwidth', type=str, default='1080', help='limit width')
    # 限制高度数值,宽度按比例计算
    parser.add_argument('--limitheight', type=str, default='1080', help='limit height')
    args = parser.parse_args()

    os.makedirs(args.output, exist_ok=True)
    main(args)

使用命令

# 限最长边 2000px,并将格式转换为 webp 格式
python batch_handle_image.py --input /input_image --output /output_image --limitshortest 0 --longestedge 2000 --towebp 1

到此这篇关于Python实现图像尺寸和格式转换处理的示例详解的文章就介绍到这了,更多相关Python图像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python 寻找局部最高点的实现

    Python 寻找局部最高点的实现

    今天小编就为大家分享一篇Python 寻找局部最高点的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python进程管理工具supervisor使用实例

    python进程管理工具supervisor使用实例

    这篇文章主要介绍了python进程管理工具supervisor使用实例,本文介绍了supervisor的安装、配置、使用等内容,需要的朋友可以参考下
    2014-09-09
  • python 产生token及token验证的方法

    python 产生token及token验证的方法

    今天小编就为大家分享一篇python 产生token及token验证的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • python 图像处理画一个正弦函数代码实例

    python 图像处理画一个正弦函数代码实例

    这篇文章主要介绍了python 图像处理画一个正弦函数代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • pyqt5 设置窗体透明控件不透明的操作

    pyqt5 设置窗体透明控件不透明的操作

    这篇文章主要介绍了pyqt5 设置窗体透明控件不透明的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • pycharm的console输入实现换行的方法

    pycharm的console输入实现换行的方法

    今天小编就为大家分享一篇pycharm的console输入实现换行的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Python必备技巧之字符数据操作详解

    Python必备技巧之字符数据操作详解

    处理字符数据是编程不可或缺的一部分。Python 提供了一组丰富的运算符、函数和方法来处理字符串。包括字符串运算符、内置函数、索引、切片和内置方法。快来学习一下吧
    2022-03-03
  • Python 实战开发校园管理系统详细流程

    Python 实战开发校园管理系统详细流程

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用Python开发一套校园管理系统,包含各种人员,如教师、学生等。学校的系统通常还包括一些课程的信息,大家可以在过程中查缺补漏,提升水平
    2021-10-10
  • python实现自定义日志的具体方法

    python实现自定义日志的具体方法

    在本篇文章里小编给大家整理的是一篇关于python实现自定义日志的具体方法,有兴趣的朋友们可以学习下。
    2021-05-05
  • Python数据可视化之分析热门话题“丁克家庭都怎么样了”

    Python数据可视化之分析热门话题“丁克家庭都怎么样了”

    今天小编就以一个数据分析师的视角来向大家讲述一下年轻人群体对于丁克的态度以及那些丁克家庭他们的想法是怎么样的?他们是否有过后悔当初的决定,需要的朋友可以参考下
    2021-06-06

最新评论