无变形图片缩放的Python代码

        最近由于处理数据集的需要,要将一批图片按一定分辨率和长宽比进行调整,于是写了这个代码。此代码有以下功能:

                ①按照指定的分辨率将图片变形(此变形不会影响图片原有的比例,多出的部分会以灰色填充)

                ②当图片方向不为横向时将其旋转90度

        核心代码为resize_img()

def resize_img(img, size):
    iw,ih = img.size
    w,h = size
    scale = min(w/iw,h/ih)                          #获取变形比例
    nw = int(iw*scale)                              #计算变形后的长宽
    nh = int(ih*scale)
    #  旋转
    if(w>h & iw<ih):
        img = img.rotate(-90)
    #  变形
    img = img.resize((nw,nh),Image.BICUBIC)
    new_img = Image.new('RGB',size,(128,128,128))   #创建一张灰色背景
    new_img.paste(img,((w-nw)//2,(h-nh)//2))        #将变形后的图片贴进背景中央
    return new_img

                其中rotate的判断条件和参数可以根据自己的需要调整

调用代码如下:

#----用以控制目标分辨率
sizeX = (4096,2160)
#--------------------
inFile = input("请输入文件夹路径")
outFile = input("请输入输出文件夹路径")
if (os.path.exists(outFile) == False):
    os.mkdir(outFile)        #当文件夹不存在时创建该路径
if(os.path.exists(inFile)):
    fileList = os.listdir(inFile)
    for file in fileList:  # 遍历文件夹中所有文件
        fullFile = inFile +'\\'+ str(file)     #组合完整的输入路径
        f = open(fullFile,'rb')                
        img = Image.open(f)                    #打开图片
        newimg = resize_img(img, sizeX)        #图片变形
        print(file)                            #打印变形成功的文件
        newimg.save(os.path.join(outFile,file))#

        !!!save函数中必须使用os.path.join连接地址(直接使用+连接会报错)

同时可以使用下列代码来判断文件类型以过滤数据

if(filetype.lower,'.jpg'or filetype.lower=='.jpge' or filetype.lower=='.png'):

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值