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


猜你喜欢
- 前言为了介绍python语言中pandas库在数据分析中的重要作用,本人打算以NBA球星勒布朗詹姆斯在2020-2021赛季常规赛个人数据为
- 本文用python实现线性回归算法,供大家参考,具体内容如下# -*- coding: utf-8 -*-"""
- 主要用到 str.charCodeAt()和 String.fromCharCode()方法--》使用 charCodeAt() 来获得字符
- 今天有个服务器速度变得非常慢,用工具一看,IIS堵塞进程达到100多个,肯定有问题,下面进入排查(聚友习惯把过程写出来,如果不需要过程,请直
- 在我们的生活中,需要接触大量的带有机械按键的物品。当你用手指按下按键的时候。都会或强或弱的感受一股(嗯,也有可能是一丝丝)反作用力传递到你手
- 利用over(),将统计信息计算出来,然后直接筛选结果集declare @t table(ProductID int,ProductName
- tensorflow中可以通过配置环境变量 'TF_CPP_MIN_LOG_LEVEL' 的值,控制tensorflow是否
- 目录前言1、字符串模板的参数2、格式控制符3、格式化操作符辅助符总结前言Python的%操作符可用于格式化字符串,控制字符串的呈现格式。使用
- 以下的文章主要是介绍SQL Server数据转换服务的4妙用之执行一些自动化的操作。在SQL Server数据库的实际操作管理中,数据库管理
- 本文实例讲述了python使用正则表达式提取网页URL的方法。分享给大家供大家参考。具体实现方法如下:import reimport url
- 前言Go 1.3 的sync包中加入一个新特性:Pool。这个类设计的目的是用来保存和复用临时对象,以减少内存分配,降低CG压力。type
- 遍历字典: keys() 、values() 、items()1. xxx.keys() : 返回字典的所有的key 返回一个序列,序列中保
- 为什么需要协程协程的本质是将一段数据的运行状态进行打包,可以在线程之间调度,所以协程就是在单线程的环境下实现的应用程序级别的并发,就是把本来
- 本文介绍基于PowerShell语言,对文件夹中全部文件的名称加以批量替换、修改的方法。在之前的文章基于Python实现自动批量修改文件名称
- 其效果图如下:使用说明 需要使用jQuery库文件和formValidation库文件[下载实例代码] http://jquery.com/
- 如何在第10000名来访者访问时显示中奖页面?看看下面的代码:< SCRIPT LANGUAGE=VBScript
- preface:做着最近的任务,对数据处理,做些简单的提特征,用机器学习算法跑下程序得出结果,看看哪些特征的组合较好,这一系列流程必然要用到
- 引言做接口测试中,对于一般性的单业务接口测试很多工具可供选择,但是对于一些相关业务相关性的关联接口测试就比较麻烦,使用工具比如jmeter、
- 前言我们在做微信小程序开发的过程中,总会遇到各种奇葩的问题。今天就把我在小程序开发过程中遇到的各种问题,及对应的解决方案总结在这里,方便以后
- 要在密码两字中间添加空格,发现直接添加 是识别不了的,正确写法为:代码: <el-form-item label=