首页 > 其他分享 >pillow批量剪辑图片

pillow批量剪辑图片

时间:2022-10-03 11:11:06浏览次数:73  
标签:paths 批量 剪辑 savedir print path os pillow dir

import os
from PIL import Image
# 2022-10-03
class imgcut():
    def getpaths(self):
        '''输入目录,返回图片的绝对路径列表'''
        while True:
            dir=input('请输入目录路径: ')
            paths=[]
            for f in os.listdir(dir):
                if f.endswith(('.png','.jpg','.jpeg','.gif')) :
                    paths.append(f)
            if paths==():
                print('路径错误或者当前路径没有图片,请重新输入: ')
                continue
            print('识别到的文件:\n', paths)
            return dir,paths

    def crop(self):
        dir,paths=self.getpaths()
        x,y=input('请输入长和宽(空格隔开): ').split()
        x,y=int(x),int(y)
        # x,y过大会补充图片
        for path in paths:
            img = Image.open(os.path.join(dir,path))
            x0, y0 = img.size
            box = [(x0 - x) // 2, (y0 - y) // 2, (x0 + x) // 2, (y0 + y) // 2] #centercrop
            imgnew=img.crop(box)
            name,ext=os.path.splitext(path)
            savedir,savename=dir+'\\crop\\',name+'_'+ext

            if not os.path.exists(savedir):
                os.makedirs(savedir)  
            imgnew.save(savedir+savename)
            print('save:',savedir+savename)
        pass

    def resize(self):
        dir,paths=self.getpaths()
        x,y=input('请输入长和宽(空格隔开,若等比例缩放另其中一个为-1): ').split()
        x,y=int(x),int(y)
        # x,y过大会补充图片
        for path in paths:
            img = Image.open(os.path.join(dir,path))
            x0,y0=img.size
            x=int(y/y0*x0) if x==-1 else x
            y=int(x/x0*y0) if y==-1 else y
            imgnew=img.resize((x,y),Image.ANTIALIAS)#NEAREST,BILINEAR,LANCZOS,ANTIALIAS
            name,ext=os.path.splitext(path)
            savedir,savename=dir+'\\',name+'_'+ext
            if not os.path.exists(savedir):
                os.makedirs(savedir)  
            imgnew.save(savedir+savename)
            print('save:',savedir+savename)
        pass

    def menu(self):
        print('格式需要再添加')
        print('默认采用中心裁剪')
        while True:
            print('-----------------------')
            print('1. 图片裁剪')
            print('2. 图片伸缩')
            print('-1. 退出')

            c=input()
            if c=='1':
                self.crop()
            elif c=='2':
                self.resize()
            elif c=='-1':
                break
            else:
                print('请重新输入:')
            

    def custom(self):
        pass

imgcut().menu()

标签:paths,批量,剪辑,savedir,print,path,os,pillow,dir
From: https://www.cnblogs.com/wqzz/p/16750175.html

相关文章

  • 05-Elasticsearch-DSL高级检索[分页, 分词, 权重, 多条件, 过滤, 排序, 关键词高亮,
    DSL搜索词库准备骚年帅气新闻网新闻闻网新闻网索引准备PUT/shop{"settings":{"number_of_shards":5,"number_of_replicas":0}}POST......
  • 06-Elasticsearch-批量操作 bulk
    批量操作bulk基本语法bulk操作和以往的普通请求格式有区别,不要格式化JSON,不然就不在同一行了,这个需要注意{action:{metadata}}代表批量操作的类型,可以是新......
  • 批量替换不同内容
    问题:表1里的“原内容”列替换为表2里对应的“替换为”列函数解决:=VLOOKUP(A3,F:G,2,) ......
  • 如何在 macOS 上使用 iMovie 进行视频剪辑教程 All In One
    如何在macOS上使用iMovie进行视频剪辑教程AllInOne视频剪辑/视频后期处理https://support.apple.com/zh-cn/HT212059https://support.apple.com/zh-cn/guid......
  • Pillow常用方法汇总
    打开图片打开一张图片是一个很快的操作,和图片的尺寸以及压缩方式无关,打开的时候只读取文件header来获取文件格式、模式、尺寸等信息fromPILimportImageim=Image.......
  • Cobbler批量部署原理
    Cobbler可以干什么Cobbler是一个快速网络安装linux的服务,而且在经过调整也可以支持网络安装windows。使用简单的命令即可完成PXE网络安装环境的配置,同时还可以管理DHCP、DNS......
  • Cobbler批量部署原理
    Cobbler可以干什么Cobbler是一个快速网络安装linux的服务,而且在经过调整也可以支持网络安装windows。使用简单的命令即可完成PXE网络安装环境的配置,同时还可以管理DHCP、......
  • python 批量修改文件名(针对目标文件夹不包括子文件)
    存在问题:如何对文件夹中的文件名进行批量编辑解决方案:采用os.listdir(file_path)遍历文件夹提取,然后进行相应编辑,该方法只针对目标文件夹不包括子文件。如果想对目标文......
  • MyBatis批量修改-Oracel
    MyBatis批量修改再利用MyBatis操作Oracle实现批量的修改操做的时候,需要用到存储过程的知识点批量修改,不同于批量的插入,批量修改可以同时操作不同表,但是如何保证他们是在同......
  • 批量巡检操作系统-小程序
    说明小工具由python编写,根据自定义的shell命令巡检所有主机,并将结果汇总到一个excel文件中,便于查看自定义shell命令主机信息巡检结果......