网络编程
位置:首页>> 网络编程>> Python编程>> Python实现图像尺寸和格式转换处理的示例详解

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

作者:飞仔FeiZai  发布时间:2021-02-17 06:33:10 

标签: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

来源:https://www.cnblogs.com/yuzhihui/p/17286675.html

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com