пятница, 30 июля 2010 г.

Python. Масштабирование изображений

С целью изучения Python-а слелал поделку для изменения размеров фотографий в пакетном режиме.

Для работы с изображениями я использовал библиотеку PIL. В Ubuntu эта библиотека предустановлена. В Windows нужно устанавливать самостоятельно. Я использую Python версии 2.7 под Windows. PIL для работы с Python 2.7 можно скачать с effbot.org.

Вот код сценария:

# Resize image

# Command line:
# python imgresize.py -d <directory> -p <percentage>

import os, sys
from PIL import Image

directory_ = sys.argv[sys.argv.index("-d") + 1]
percentage_ = int(sys.argv[sys.argv.index("-p") + 1])

filenames_ = os.listdir(directory_)

for filename_ in filenames_[:]:
    path_ = directory_ + "\\" + filename_
    if not os.path.isfile(path_):
        continue
    try:
        image_ = Image.open(path_)
        size_ = (image_.size[0] * percentage_ / 100, image_.size[1] * percentage_ / 100)
        if percentage_ < 100:
            image_ = image_.resize(size_, Image.ANTIALIAS)
        else:
            image_ = image_.resize(size_, Image.NEAREST)
        image_.save(directory_ + "\\r_" + filename_)
        print path_, "=>", "r_" + filename_, " OK "
    except:
        print path_, "\n", sys.exc_info()
    
print "Finish" 

Параметры командной строки описаны в начале сценария. Сценарий принимает два обязательных параметра: -d – путь, -p – новый размер изображения в процентах. Пример вызова:

python imgresize.py –d «C:\Photos» –p 50

В результате выполнения сценария в каталоге «C:\Photos» будут созданы файлы с именами начинающимися на «r_» и размером в два раза меньше исходных.

3 комментария:

  1. Спасибо, очень удобный скрипт, я его немного доработал и использую для автоматизации выгрузки и ресайза фотографий с цифрового фотоаппарата для последующей заливки в Интернет.

    ОтветитьУдалить
  2. Рад что пригодилось. Подкидывайте идеи. :)

    ОтветитьУдалить
  3. Искала описание библиотеки, с помощью которой можно выполнить масштабирование, а нашла скрипт. Автор, спасибо, облегчил жизнь!

    ОтветитьУдалить