一个python程序解决[更改图片名称_转换图片成JPG格式_修改图片尺寸]

如何套用该段代码:
1.确保路径为全英,图片名称也要是全英
2.对于两层的文件夹
如图:

在这里插入图片描述
运行下面代码时选用

#两层文件夹
if __name__=="__main__":
    #含图片的文件夹叫做fileName,dir1的上层文件夹的路径为PATH
    for fileName in os.listdir(PATH):
        #子文件夹路径
        dirName =  PATH + '/' + fileName + '//'
        childPATH = PATH + '/'+ fileName
        print(childPATH)
        renameall(childPATH,fileName)
        print(childPATH,'rename is over')
        convertToJPG(dirName,fileName)
        print(childPATH,'convertToJPG is over')
        resizeAll(childPATH)
        print(childPATH,'resizeAll is over')

3.对于一层文件夹时,
如图:

在这里插入图片描述
选用:

#一层文件夹
# if __name__=="__main__":

#     #含图片的文件夹叫做fileName,dir1的上层文件夹的路径为PATH
#     dirName =  PATH +  '//' +fileName
#     childPATH = PATH + '/'+ fileName
#     print(childPATH)
#     renameall(childPATH,fileName)
#     print(childPATH,'rename is over')
#     convertToJPG(dirName,fileName)
#     print(childPATH,'convertToJPG is over')
#     resizeAll(childPATH)
#     print(childPATH,'resizeAll is over')

完整代码如下:
套用直接按照上面要求修改代码中的PATH即可

# -*- coding: utf-8 -*-
"""
Created on Wed Jun  3 20:59:35 2020

@author: 吴
"""

'''
路径要为全英文,图片名称也是
changeName 改成和文件夹一样前缀 + number +.jpg
convertToJPG
resizeImage 512*384

'''
import cv2
import matplotlib.pyplot as plt
import os
import re
import sys
from PIL import Image
import string
import numpy as np

PATH = r'D:\HarmfulGarbage'


def resizeImage(file,NoResize):
    
    
    
    image = cv2.imread(file,cv2.IMREAD_COLOR)
    # print(type(image))
    
    #如果type(image) == 'NoneType',会报错,导致程序中断,所以这里先跳过这些图片,
    #并记录下来,结束程序后手动修改(删除)
    
    if image is None:
        NoResize += [str(file)]
    else:
        resizeImg = cv2.resize(image,(512,384))
        cv2.imwrite(file,resizeImg)
        cv2.waitKey(100)

def resizeAll(root):
    
    #待修改文件夹
    fileList = os.listdir(root)
    #输出文件夹中包含的文件        
    # print("修改前:"+str(fileList))
    #得到进程当前工作目录
    currentpath = os.getcwd()   
    #将当前工作目录修改为待修改文件夹的位置    
    os.chdir(root)
    
    NoResize = []  #记录没被修改的图片
    
    for file in fileList:       #遍历文件夹中所有文件
        file = str(file)
        resizeImage(file,NoResize)
         
    print("---------------------------------------------------")
    
    os.chdir(currentpath)       #改回程序运行前的工作目录
    
    sys.stdin.flush()       #刷新
    
    if len(NoResize) != 0:
        print('没被修改的图片: ',root , '\t' ,NoResize)

    
def convertToJPG(dirName,childPATH):
    li=os.listdir(dirName)
    for filename in li:
        newname = filename
        newname = newname.split(".")
        if newname[-1]=="jpeg":
            newname[-1]="jpg"
            newname = str.join(".",newname)  
            filename = dirName+filename
            newname = dirName+newname
            os.rename(filename,newname)
        elif newname[-1] == 'png':
            newname[-1]="jpg"
            newname = str.join(".",newname)  
            filename = dirName+filename
            newname = dirName+newname
            os.rename(filename,newname)
        savePATH = childPATH + '/' +filename 
        print(savePATH)
        # img = Image.open(savePATH).convert('RGB')
        # img.save(savePATH)
        
    print('convert To JPG is over!')
    print('Now resize images')
    
def renameall(root,NewFileName):
    
    #待修改文件夹
    fileList = os.listdir(root)
    #输出文件夹中包含的文件        
    print("修改前:"+str(fileList))     
    #得到进程当前工作目录
    currentpath = os.getcwd()   
    #将当前工作目录修改为待修改文件夹的位置    
    os.chdir(root)
    num=1       #名称变量
    
    for fileName in fileList:       #遍历文件夹中所有文件
        

        preName,_ = fileName.split('_',1)
            
        if preName != NewFileName :
            pat=".+\.(jpg|png|pgm|jpeg|JPG)"     #匹配文件名正则表达式
            pattern = re.findall(pat,fileName)      #进行匹配
            os.rename(fileName,(str(NewFileName)+'_'+str(num)+'.'+pattern[0]))       #文件重新命名
            num = num+1     #改变编号,继续下一项
    print("---------------------------------------------------")
    os.chdir(currentpath)       #改回程序运行前的工作目录
    sys.stdin.flush()       #刷新
    # print("修改后:"+str(os.listdir(root)))       #输出修改后文件夹中包含的文件

#两层文件夹
if __name__=="__main__":
    #含图片的文件夹叫做fileName,dir1的上层文件夹的路径为PATH
    for fileName in os.listdir(PATH):
        #子文件夹路径
        dirName =  PATH + '/' + fileName + '//'
        childPATH = PATH + '/'+ fileName
        print(childPATH)
        renameall(childPATH,fileName)
        print(childPATH,'rename is over')
        convertToJPG(dirName,fileName)
        print(childPATH,'convertToJPG is over')
        resizeAll(childPATH)
        print(childPATH,'resizeAll is over')

#一层文件夹
# if __name__=="__main__":

#     #含图片的文件夹叫做fileName,dir1的上层文件夹的路径为PATH
#     dirName =  PATH +  '//' +fileName
#     childPATH = PATH + '/'+ fileName
#     print(childPATH)
#     renameall(childPATH,fileName)
#     print(childPATH,'rename is over')
#     convertToJPG(dirName,fileName)
#     print(childPATH,'convertToJPG is over')
#     resizeAll(childPATH)
#     print(childPATH,'resizeAll is over')

整这个麻烦死了,不过确实是一劳永逸的方法,希望对你有帮助~

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值