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图像内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python如何批量更改图像尺寸统一大小

    目录 批量更改图像尺寸统一大小 知识点 将不同尺寸的图片和xml标签缩放到统一尺寸,并重新命名存储 总结 批量更改图像尺寸统一大小 import os from PIL import Image import glob def convertjpg(jpgfile,outdir,width=200,height=500): img=Image.open(jpgfile) new_img=img.resize((width,height),Image.BILINEAR) new_img.save(

  • Python 玩转图像格式转换操作

    最近在做图片相关的工作,面对各种格式的图片转换,在OpenCV跟Pillow之间来回切换.觉得有必要把这些东西记录下来,以备不时之需. 首先介绍一下图片的常见三种存储格式. 1.图片的存储格式 不同的场景,经常会使用不同存储格式的图片. 在给人们展示时,一般是采用文件的方式进行存储,常见的有jpg,png,jpeg等等文件格式,便于人们区分理解. 在计算机网络中传输时,一般是采用字节流的方式进行存储,常见的有base64编码的图片字节流,便于计算机网络传输. 在计算机对图片进行处理时,一般是采用

  • 用python 批量更改图像尺寸到统一大小的方法

    如下所示: #提取目录下所有图片,更改尺寸后保存到另一目录 from PIL import Image import os.path import glob def convertjpg(jpgfile,outdir,width=128,height=128): img=Image.open(jpgfile) try: new_img=img.resize((width,height),Image.BILINEAR) new_img.save(os.path.join(outdir,os.pat

  • python opencv 图像尺寸变换方法

    利用Python OpenCV中的 cv.Resize(源,目标,变换方法)就可以实现变换为想要的尺寸了 源文件:就不用说了 目标:你可以对图像进行倍数的放大和缩小 也可以直接的输入尺寸大小 变换的方法: CV_INTER_NN - 最近邻插值, CV_INTER_LINEAR - 双线性插值 (缺省使用) CV_INTER_AREA - 使用象素关系重采样.当图像缩小时候,该方法可以避免波纹出现.当图像放大时,类似于 CV_INTER_NN 方法.. CV_INTER_CUBIC - 立方插值

  • python实现固定尺寸图像拼接

    本文实例为大家分享了python实现固定尺寸图像拼接,供大家参考,具体内容如下 讲解 1.代码效果:固定尺寸图像拼接 代码 import os import cv2 import numpy as np def joint(or_path, tar_path, size): determination = tar_path if not os.path.exists(determination): os.makedirs(determination) path = or_path folders

  • 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(

  • python获取时间及时间格式转换问题实例代码详解

    整理总结一下python中最常用的一些时间戳和时间格式的转换 第一部分:获取当前时间和10位13位时间戳 import datetime, time '''获取当前时间''' n = datetime.datetime.now() print(n) '''获取10位时间戳''' now = time.time() print(int(now)) '''获取13位时间戳''' now2 = round(now*1000) print(now2) 运行结果为: 2018-12-06 11:00:30

  • Python绘制惊艳的桑基图的示例详解

    目录 桑基图简介 什么是桑基图? 如何绘制桑基图? 桑基图绘图基础 调整节点位置和图表宽度 添加有意义的悬停标签 桑基图简介 很多时候,我们需要一种必须可视化数据如何在实体之间流动的情况.例如,以居民如何从一个国家迁移到另一个国家为例.这里演示了有多少居民从英格兰迁移到北爱尔兰.苏格兰和威尔士. 从这个 桑基图 (Sankey)可视化中可以明显看出,从England迁移到Wales的居民多于从Scotland或Northern Ireland迁移的居民. 什么是桑基图? 桑基图通常描绘 从一个实

  • Python tkinter库绘制春联和福字的示例详解

    马上要过年了,用 Python 写一副春联&福字送给大家,本文我们主要用到的 Python 库为 tkinter,下面一起来看一下具体实现. 首先,我们创建一个画布,代码实现如下: root=Tk() root.title('新年快乐') canvas=Canvas(root,width=500,height=460,bg='lightsalmon') 看一下效果: 我们接着写上联,主要代码实现如下: for i in range(0,451): canvas.create_rectangle(

  • Python Flask实现图片上传与下载的示例详解

    目录 1.效果预览 2.新增逻辑概览 3.tuchuang.py 逻辑介绍 3.1 图片上传 3.2 图片合法检查 3.3 图片下载 4.__init__.py 逻辑介绍 5.upload.html 介绍 5.1 upload Jinja 模板介绍 5.2 upload css 介绍(虚线框) 5.3 upload js 介绍(拖拽) 1.效果预览 我们基于 Flask 官方指导工程,增加一个图片拖拽上传功能,效果如下: 2.新增逻辑概览 我们在官方指导工程上进行增加代码,改动如下: 由于 fl

  • C#实现数字转换汉字的示例详解

    目录 实践过程 效果 代码 实践过程 效果 代码 public partial class Form1 : Form { public Form1() { InitializeComponent(); } public static string CNumToCh(string x) { //数字转换为中文后的数组 string[] num = new string[] { "零", "壹", "贰", "叁", "

  • python接口自动化之正则用例参数化的示例详解

    目录 前言 一.正则表达式语法 1.1表示单字符 1.2表示数量 1.2.1匹配分组 1.3 表示边界 二.贪婪模式 三.re模块 3.1 re.findall() 3.2re.search() 3.3 re.match() 3.4re.sub() 四.用例参数化 总结 前言 ​我们在做接口自动化的时候,处理接口依赖的相关数据时,通常会使用正则表达式来进行提取相关的数据. ​正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(Regular Expression,在代码中

  • Python用zip函数同时遍历多个迭代器示例详解

    前言 本文主要介绍的是Python如何使用zip函数同时遍历多个迭代器,文中的版本为Python3,zip函数是Python内置的函数.下面话不多说,来看详细的内容. 应用举例 >>> list1 = ['a', 'b', 'c', 'd'] >>> list2 = ['apple', 'boy', 'cat', 'dog'] >>> for x, y in zip(list1, list2): print(x, 'is', y) # 输出 a is

  • python中类和实例如何绑定属性与方法示例详解

    前言 python类与实例的方法的调用中觉得云里雾里,思考之后将自己的想法记录下,一来加深自己理解,巩固自己记忆,而来帮助一些想要学习python的朋友理解这门抽象的语言,由于Python是动态语言,类以及根据类创建的实例可以任意绑定属性以及方法,下面分别介绍. 1.类绑定属性 类绑定属性可以直接在class中定义属性,这种属性是类属. class Student(object): name = 'Student' 这个属性虽然归类所有,但类的所有实例都可以访问到. class Student(

  • python中is与双等于号“==”的区别示例详解

    前言 在开始本文之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识).python type()(数据类型)和value(值).is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同.下面来看看具体区别在哪. 发现问题 最近在给小伙伴写段小代码用于爬取一个GIS的各高层数据,python中使用了"is"来代替"==",结果下载至512的时候出了问题. 代码如下 def get_next(x, y, z): z += 1 if

随机推荐