2009-06-26 3 views
6

У меня есть каталог, полный изображений, которые я бы хотел изменить до 60% от их первоначального размера.Изменить размер изображений в каталоге

Как бы я это сделал? Может быть в любом Python или Perl

Приветствий

Eef

+0

Я не уверен. Прежде всего - он не говорит, что это одноразовая работа. Второй - «Irfan View» может не быть вариантом - например, из-за ограничений операционной системы. В-третьих - ImageMagick настолько сложна, что даже использование его в качестве пакетного инструмента - это своего рода программирование. – 2009-06-26 14:05:29

ответ

1

Я использую Python с PIL (Python Image Library). Конечно, для этого есть специальные программы.

Многие люди используют PIL для таких вещей. Посмотрите: Quick image resizing with python

PIL является очень мощным и недавно я нашел этот рецепт: Putting watermark to images in batch

2

Использование PerlMagick, это интерфейс к популярной ImageMagick набор инструментов командной строки, чтобы сделать только такого рода вещи. PythonMagic.

0

Вам нужно просто изменить его размер или вы хотите изменить размер программно? Если просто изменить размер, используйте PixResizer. http://bluefive.pair.com/pixresizer.htm

10

Может ли это быть в оболочке?

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 ... - просто быть в безопасности, если изменение размера (по какой-либо причине) потерпит неудачу.

+0

Спасибо за это, именно это я и искал. –

18

Если вы хотите сделать это программно, и я предполагаю, что это так, используйте 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) 
Смежные вопросы