Resize images in directory

前端 未结 6 2086
半阙折子戏
半阙折子戏 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 14:56

    Use PerlMagick, it's an interface to the popular ImageMagick suite of command line tools to do just this kind of stuff. PythonMagic is available as well.

    0 讨论(0)
  • 2021-02-03 15:01

    do you need to just resize it or you want to resize programmatically? If just resize use PixResizer. http://bluefive.pair.com/pixresizer.htm

    0 讨论(0)
  • 2021-02-03 15:04

    Can it be in shell?

    mkdir resized
    for a in *.jpg; do convert "$a" -resize 60% resized/"$a"; done
    

    If you have > 1 core, you can do it like this:

    find . -maxdepth 1 -type f -name '*.jpg' -print0 | xargs -0 -P3 -I XXX convert XXX -resize 60% resized/XXX
    

    -P3 means that you want to resize up to 3 images at the same time (parallelization).

    If you don't need to keep originals you can use mogrify, but I prefer to use convert, and then rm ...; mv ... - just to be on safe side if resizing would (for whatever reason) fail.

    0 讨论(0)
  • 2021-02-03 15:07

    How about using mogrify, part of ImageMagick? If you really need to control this from Perl, then you could use Image::Magick, Image::Resize or Imager.

    0 讨论(0)
  • 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)
    
    0 讨论(0)
  • 2021-02-03 15:15

    I use Python with PIL (Python Image Library). Of course there are specialized programs to do this.

    Many people use PIL to such things. Look at: Quick image resizing with python

    PIL is very powerful and recently I have found this recipe: Putting watermark to images in batch

    0 讨论(0)
提交回复
热议问题