当前位置: 首页 > article >正文

PYTHON 自动化办公:更改图片尺寸大小

1. 前言

在之前的文章中,介绍了图片的压缩技术,这里讲解如何利用python批量将图片改为指定后缀的格式。当然,也可以为深度学习批量更改文件后缀,例如在分割中,可能需要img和mask的图片名称完全一致等等

如有需要,参考本专栏其他博文

2. 单张图片更改尺寸

代码如下:

因为有的图片名称很长,甚至中途还会将后缀出现,例如 sda1233pngddwsa.png

但无论怎样风骚的文件名,不可能出现带 . + 后缀 的字符串,因为会直接报错。所以这里image_format 列表文件名都加了 . 方便遍历

import cv2


def main(img_path, size=(256,256)):
    image_format = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.ai', '.cdr', '.eps']  # 常见的图片后缀名

    for i in image_format:
        if i in img_path:
            ret_path = img_path.split(i)[0]  # 文件名
            ret_path = ret_path + '.jpg'   # 返回的图片名

    img =cv2.imread(img_path)
    img = cv2.resize(img,size)
    cv2.imwrite(ret_path,img)


if __name__ == '__main__':
    root = 'a.jpg'       # 传入图片的路径
    img_size = (256,256)        # size

    main(img_path=root, size=img_size)

3. 单个目录下所有图片更改

将所有需要更改的图片放在同一目录下即可:

import cv2
import os
from tqdm import tqdm


def main(folder_path,size=(256,256)):
    ret_folder_path = folder_path + '_ret'  # 返回父目录
    if not os.path.exists(ret_folder_path):  # 建立目录
        os.makedirs(ret_folder_path)

    img_path = [i for i in os.listdir(folder_path)]  # 所有图片路径

    for i in tqdm(img_path):
        img = os.path.join(folder_path, i)

        img = cv2.imread(img)  # 打开图片
        img = cv2.resize(img,size)
        cv2.imwrite(os.path.join(ret_folder_path, i),img)


if __name__ == '__main__':
    root = 'test'  # 多个图片的父目录
    size = (256,256)
    main(folder_path=root,size=size)

4. 多个目录下图片更改

要将多个目录放在一个大的父目录下:

import cv2
import os
from tqdm import tqdm


def main(img_path, img_fm,size):
    image_format = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.ai', '.cdr', '.eps']  # 常见的图片后缀名

    # 返回的新目录
    ret_folder_path = img_path + '_ret'
    if not os.path.exists(ret_folder_path):
        os.makedirs(ret_folder_path)

    sub_folder = [i for i in os.listdir(img_path)]

    for sf in tqdm(sub_folder):
        os.makedirs(os.path.join(ret_folder_path, sf))

        for i in os.listdir(os.path.join(img_path, sf)):  # 图片名
            for j in image_format:
                if j in i:
                    ret_path = i.split(j)[0]  # 文件名
                    ret_path = ret_path + '.' + img_fm  # 返回的图片名
            try:
                img = cv2.imread(os.path.join(img_path, sf, i))
                img = cv2.resize(img,size)
                cv2.imwrite(os.path.join(ret_folder_path, sf, ret_path),img)
            except:
                pass


if __name__ == '__main__':
    root = 'test'  # 传入图片文件夹目录
    img_format = 'jpg'  # 待更改的后缀格式 jpg png jpeg ...
    size = (300,300)

    main(img_path=root, img_fm=img_format,size=size)


http://www.kler.cn/a/447750.html

相关文章:

  • 全志H618 Android12修改doucmentsui选中图片资源详情信息
  • 你好Python
  • LeetCode 热题 100_K 个一组翻转链表(31_25_困难_C++)(四指针法)
  • 多个Echart遍历生成 / 词图云
  • 2024年华为OD机试真题-字符串分割-C++-OD统一考试(E卷)
  • [python]使用flask-caching缓存数据
  • Spring之我见 - 从IOC谈到AOP实现原理
  • YOLO模型分布式训练:步骤与操作方式
  • 【面经】python后端开发工程师
  • CFD POST导出动画
  • Open3D 进阶(26)Hierarchical Clustering算法实现点云分割
  • 【C语言1】C语言常见概念(总结复习篇)——库函数、ASCII码、转义字符
  • 入门靶机:DC-1的渗透测试
  • OpenAI直播发布第11天:ChatGPT桌面客户端升级,就这?
  • 一些经济政治学类书籍推荐 --- 以及与之相关我的经历和理解
  • 前端生成docx文档、excel表格、图片、pdf文件
  • docker 软连接修改存储位置
  • MySQL列类型
  • 知网研学 | 知网文献(CAJ+PDF)批量下载
  • 前端实现图片压缩
  • C++进阶-1-单继承、多继承、虚继承
  • SpringBoot配置Swagger和MybatisPlus
  • memcached 与 redis 的区别?
  • 集成方案 | Docusign + 金蝶云,实现合同签署流程自动化!
  • Ubuntu22.04配置3D gaussian splatting
  • 概率论基础