У меня есть каталог, полный изображений, которые я бы хотел изменить до 60% от их первоначального размера.Изменить размер изображений в каталоге
Как бы я это сделал? Может быть в любом Python или Perl
Приветствий
Eef
У меня есть каталог, полный изображений, которые я бы хотел изменить до 60% от их первоначального размера.Изменить размер изображений в каталоге
Как бы я это сделал? Может быть в любом Python или Perl
Приветствий
Eef
Как насчет использования mogrify, часть ImageMagick? Если вам действительно нужно это контролировать с Perl, вы можете использовать Image::Magick, Image::Resize или Imager.
Я использую Python с PIL (Python Image Library). Конечно, для этого есть специальные программы.
Многие люди используют PIL для таких вещей. Посмотрите: Quick image resizing with python
PIL является очень мощным и недавно я нашел этот рецепт: Putting watermark to images in batch
Использование PerlMagick, это интерфейс к популярной ImageMagick набор инструментов командной строки, чтобы сделать только такого рода вещи. PythonMagic.
Вам нужно просто изменить его размер или вы хотите изменить размер программно? Если просто изменить размер, используйте PixResizer. http://bluefive.pair.com/pixresizer.htm
Может ли это быть в оболочке?
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 ... - просто быть в безопасности, если изменение размера (по какой-либо причине) потерпит неудачу.
Спасибо за это, именно это я и искал. –
Если вы хотите сделать это программно, и я предполагаю, что это так, используйте 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)
Я не уверен. Прежде всего - он не говорит, что это одноразовая работа. Второй - «Irfan View» может не быть вариантом - например, из-за ограничений операционной системы. В-третьих - ImageMagick настолько сложна, что даже использование его в качестве пакетного инструмента - это своего рода программирование. – 2009-06-26 14:05:29