我有一个图片目录,想将其中的图片缩小到原始大小的60%左右。
我该如何操作?可以用Python或Perl实现。
谢谢
Eef
我有一个图片目录,想将其中的图片缩小到原始大小的60%左右。
我该如何操作?可以用Python或Perl实现。
谢谢
Eef
如果你想以编程方式实现它,我假设是这种情况,可以使用PIL来调整大小,例如:
newIm = im.resize((newW, newH)
然后将其保存到同一文件或新位置。
递归地遍历文件夹并对所有图像应用缩放函数。
我想出了一个样本脚本,我认为它会适合您的需求。您可以在此基础上进行改进:例如使其成为图形化界面,添加更多选项,比如相同扩展名或所有png格式、调整采样线性/双线性等。
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)
可以用shell实现吗?
mkdir resized
for a in *.jpg; do convert "$a" -resize 60% resized/"$a"; done
如果您有 > 1 个核心,可以这样做:
find . -maxdepth 1 -type f -name '*.jpg' -print0 | xargs -0 -P3 -I XXX convert XXX -resize 60% resized/XXX
-P3 表示您想同时调整大小最多 3 张图像(并行处理)。
如果您不需要保留原始文件,可以使用 mogrify,但我更喜欢使用 convert,然后 rm ...; mv ... - 这样做是为了安全起见,以防调整大小失败(出于任何原因)。
我使用Python和PIL(Python图像库)。当然,也有专门的程序可以做到这一点。
许多人使用PIL来完成这些任务。看看:使用Python快速调整图像大小
PIL非常强大,最近我发现了这个配方: 批量给图像加水印