Resize images in directory

和自甴很熟 提交于 2019-12-02 21:19:26

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.

Anurag Uniyal

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)

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.

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.

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!