python 批量等比修改文件夹下图片的尺寸

Posted 不懂的味道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 批量等比修改文件夹下图片的尺寸相关的知识,希望对你有一定的参考价值。

python 批量等比修改文件夹下图片的尺寸

最近在做实验时,需要批量更改文件夹中的图像尺寸,在网上查找了方法,以此记录学习的过程。



前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、分别使用OpenCV和Pillow库批量处理图像尺寸?

两个库都是图像处理中比较长用的,但是在使用时还是有一定的差异性,比如OpenCV中,读取的路径不能有中文格式,而pillow可以读取中文路径下的图片,因此保存两个代码以备后续使用。

二、使用步骤

1.Opencv

代码如下:

import cv2
import os.path
import os
import numpy as np

##长边设置为512像素,等比修改图片大小
##
def img_resize(img):
    height, width = img.shape[0], img.shape[1]
    # 设置新的图片分辨率框架,这里设置为长边像素大小为512
    width_new = 512
    height_new = 512
    # 判断图片的长宽比率
    if width / height >= width_new / height_new:
        img_new = cv2.resize(img, (width_new, int(height * width_new / width)))
    else:
        img_new = cv2.resize(img, (int(width * height_new / height), height_new))
    return img_new


def read_path(file_path,save_path):
    #遍历该目录下的所有图片文件
    for filename in os.listdir(file_path):
        # print(filename)
        img = cv2.imread(file_path+'/'+ filename)
        if img is None :
            print("图片更改完毕")
            break
        ####change to size
        image = img_resize(img)
        cv2.imwrite(save_path + filename, image)


#读取的目录
if __name__ == '__main__':
    file_path = 'E:/Images/LowResolution512/01'
    save_path = 'E:/Images/LowResolution512/01/'
    read_path(file_path,save_path)

当读取的图片路径有中文时,会有如图所示的错误。

2.Pillow

代码如下:

# -*- coding: utf-8 -*-
import os
import glob
from PIL import Image
import os.path

'''修改图片文件大小、file_path:文件夹路径;jpgfile:图片文件;savedir:修改后要保存的路径'''

def convertjpg(jpgfile, savedir, width_new=512, height_new=512):
    img = Image.open(jpgfile)
    width,height = img.size
    #判断长宽比
    if width / height >= width_new / height_new:
        new_img = img.resize((width_new, int(height * width_new / width)))
    else:
        new_img = img.resize((int(width * height_new / height), height_new))
    return new_img.save(os.path.join(savedir, os.path.basename(jpgfile)))
    '''查找给定路径下图片文件,并修改其大小'''


def modifyjpgSize(file, saveDir):
    for jpgfile in glob.glob(file):
       convertjpg(jpgfile, saveDir)

 # 读取目录
if __name__ == '__main__':
	img_file = r'E:\\Huc\\风格调色图片\\中式-红\\转档\\*.jpg'
	saveDir = r'E:\\Images\\LowResolution512\\05'
	modifyjpgSize(img_file, saveDir)


不使用glob库

# -*- coding: utf-8 -*-
import os
from PIL import Image
import os.path

'''修改图片文件大小、file_path:文件夹路径;jpgfile:图片文件;savedir:修改后要保存的路径'''

def convertjpg(file_path, jpgfile, savedir, width_new=512, height_new=512):
    img = Image.open(file_path + jpgfile)
    width,height = img.size
    #判断长宽比
    if width / height >= width_new / height_new:
        new_img = img.resize((width_new, int(height * width_new / width)))
    else:
        new_img = img.resize((int(width * height_new / height), height_new))
    return new_img.save(os.path.join(savedir, jpgfile))
    

'''循环遍历路径下图片文件,并修改其大小'''
def modifyjpgSize(file_path, saveDir):
    filelist = os.listdir(file_path)
    for jpgfile in filelist:
       convertjpg(file_path, jpgfile, saveDir)

#读取目录
if __name__ == '__main__':
    file_path = 'E:/Huca/风格调色图片/中式-红/转档/'
    saveDir = 'F:/ganggang/hucai/test1'
    modifyjpgSize(file_path, saveDir)

使用这种方法可以很快的更改图片尺寸。


以上是关于python 批量等比修改文件夹下图片的尺寸的主要内容,如果未能解决你的问题,请参考以下文章

python:批量修改文件名批量修改图片尺寸

Python批量修改图片格式和尺寸

如何批量调整Word中图片大小

利用pillow库(PIL)批量修改图片尺寸

使用python对文件夹下的照片进行批量修改尺寸

PS批量修改图片尺寸