Resize images in directory

前端 未结 6 2100
半阙折子戏
半阙折子戏 2021-02-03 14:41

I have a directory full of images that I would like to resize to around 60% of their original size.

How would I go about doing this? Can be in either Python or Perl

6条回答
  •  一整个雨季
    2021-02-03 15:13

    If you want to do it programatically, which I assume is the case, use PIL to resize e.g.

    newIm = im.resize((newW, newH)
    

    then save it to same file or a new location.

    Go through the folder recursively and apply resize function to all images.

    I have come up with a sample script which I think will work for you. You can improve on it: Maybe make it graphical, add more options e.g. same extension or may be all png, resize sampling linear/bilinear etc

    import os
    import sys
    from PIL import Image
    
    def resize(folder, fileName, factor):
        filePath = os.path.join(folder, fileName)
        im = Image.open(filePath)
        w, h  = im.size
        newIm = im.resize((int(w*factor), int(h*factor)))
        # i am saving a copy, you can overrider orginal, or save to other folder
        newIm.save(filePath+"copy.png")
    
    def bulkResize(imageFolder, factor):
        imgExts = ["png", "bmp", "jpg"]
        for path, dirs, files in os.walk(imageFolder):
            for fileName in files:
                ext = fileName[-3:].lower()
                if ext not in imgExts:
                    continue
    
                resize(path, fileName, factor)
    
    if __name__ == "__main__":
        imageFolder=sys.argv[1] # first arg is path to image folder
        resizeFactor=float(sys.argv[2])/100.0# 2nd is resize in %
        bulkResize(imageFolder, resizeFactor)
    

提交回复
热议问题