Нужна помощь для завершения пакетного сценария? - PullRequest
0 голосов
/ 08 февраля 2012

Буду признателен за любую помощь, как начать или что-нибудь еще.

Я только что узнал, что существует инструмент 'ImageMagick', который может из командной строки автоматически изменять размеры изображений.Основываясь на этих знаниях, я думаю, что разумнее делать следующее:

Структура папок:

  1. C: \ TEST -> подпапки -> импорт, экспорт
  2. import -> subfolders -> Мы не знаем точное имя папки, это может быть что угодно!
  3. export -> subfolders -> файлы из 'import'

Когда я добавляю «X» количество папок (каждая папка содержит «X» изображений) для «импорта», я хочу:

  1. Копироватьпервая папка «X» в «импорте» (и все изображения внутри) для «экспорта» -> изменить размер до 400x300px и переименовать в «1a»

  2. скопировать первую папку «X» в «импортировать »(и все изображения внутри) в« экспорт »-> изменить размер до 200x150px и переименовать в« 1b »

    *.Предполагается, что в первой папке «X» в папке «export» скопировано десять изображений ... Это будет выглядеть следующим образом - 1a, 1b, 2a, 2b, 3a, 3b ... 10a, 10b

Когда закончите первую папку 'X' ... начните снова, пока она не достигнет конца папки 'X' в 'import'.


Пример #: Это только предположение, названия и номера файлов и папок у нас нет!

Структура папок:

  1. C: \ TEST -> подпапки -> import,экспорт
  2. импорт -> подпапки -> f1, e7, DD -> у нас есть три папки
  3. экспорт -> подпапки -> f1, e7, DD

    1. Изменение размера всех изображений в 'C: \ TEST \ import \ f1' до 'C: \ TEST \ export \ f1 \ 1a'
    2. Изменение размера всех изображений в 'C: \ TEST \ import \ f1 'в' C: \ TEST \ export \ f1 \ 1b '

    3. Изменить размер всех изображений в' C: \ TEST \ import \ e7 'на' C: \ TEST \ export \ e7 \ 1a '

    4. Изменить размер всех изображений в' C: \ TEST \ import \ e7 'на' C: \ TEST \ export \ e7 \ 1b '

    5. Изменить размер всех изображений в «C: \ TEST \ import \ DD» до «C: \ TEST \ export \ DD \ 1a»

    6. Изменить размер всех изображений в «C: \ TEST \ import \ DD»'to' C: \ TEST \ export \ DD \ 1b '

Синтаксис ImageMagick для изменения размера в командной строке:

mogrify -resize 400x300 исходный файл

mogrify -resize 400x300 C: \ picture_name.jpg

Я нашел пакетный скрипт на их сайте http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=16486 возможно, это может помочь.

1 Ответ

0 голосов
/ 08 февраля 2012

Конечно.Вот как написать пакетный скрипт для того, чтобы сделать то, что вам нужно (на Python): сохраните его как runMogrify.py

import os
import string
import fnmatch

source = "c:\\TEST\\import"
target = "c:\\TEST\\export"

def mogrify(parmSource, parmTarget):
    mkdirList = []
    copyList = []
    mogrifyList = []

    mkdirList.append('mkdir "' + parmTarget + '"')

    for dirpath, dirnames, filenames in os.walk (parmSource):
        # print dirpath, dirnames, filenames
        for (index,file) in enumerate(sorted(filenames)):
            if fnmatch.fnmatch(file.lower(), '*.jpg') or \
               fnmatch.fnmatch(file.lower(), '*.gif') or \
               fnmatch.fnmatch(file.lower(), '*.bmp'):
                sourceFDirPathFile = dirpath + "\\" + file

                targetFDirPath     = os.path.join (parmTarget, dirpath[1+len (parmSource):])
                targetADirPathFile = targetFDirPath + "\\" + str(index+1) + "a" + os.path.splitext(file)[1]
                targetBDirPathFile = targetFDirPath + "\\" + str(index+1) + "b" + os.path.splitext(file)[1]

                if 'mkdir "' + targetFDirPath + '"' not in mkdirList:
                    mkdirList.append('mkdir "' + targetFDirPath + '"')

                copyList.append('copy "' + sourceFDirPathFile + '" "' + targetADirPathFile + '"')
                copyList.append('copy "' + sourceFDirPathFile + '" "' + targetBDirPathFile + '"')

                mogrifyList.append('mogrify -resize 400x300 "' + targetADirPathFile + '"')
                mogrifyList.append('mogrify -resize 200x150 "' + targetBDirPathFile + '"')

    return mkdirList, copyList, mogrifyList

def main():
    mkdirList, copyList, mogrifyList = mogrify(source, target)

    f = open('RUNMOGRIFY.BAT', 'w')
    f.writelines( list("%s\n" % item for item in mkdirList  ) )
    f.writelines( list("%s\n" % item for item in copyList   ) )
    f.writelines( list("%s\n" % item for item in mogrifyList) )
    f.close()

if __name__=="__main__": main()

И вот результирующий пакетный файл (RUNMOGRIFY.BAT) после того, как я запустил Pythonскрипт выше
в тестовой директории, похожей на вашу:

mkdir "c:\TEST\export"
mkdir "c:\TEST\export\folder1"
mkdir "c:\TEST\export\folder2"
mkdir "c:\TEST\export\folder3"
copy "c:\TEST\import\folder1\a.jpg" "c:\TEST\export\folder1\1a.jpg"
copy "c:\TEST\import\folder1\a.jpg" "c:\TEST\export\folder1\1b.jpg"
copy "c:\TEST\import\folder1\b.jpg" "c:\TEST\export\folder1\2a.jpg"
copy "c:\TEST\import\folder1\b.jpg" "c:\TEST\export\folder1\2b.jpg"
copy "c:\TEST\import\folder1\c.jpg" "c:\TEST\export\folder1\3a.jpg"
copy "c:\TEST\import\folder1\c.jpg" "c:\TEST\export\folder1\3b.jpg"
copy "c:\TEST\import\folder2\a.jpg" "c:\TEST\export\folder2\1a.jpg"
copy "c:\TEST\import\folder2\a.jpg" "c:\TEST\export\folder2\1b.jpg"
copy "c:\TEST\import\folder2\b.jpg" "c:\TEST\export\folder2\2a.jpg"
copy "c:\TEST\import\folder2\b.jpg" "c:\TEST\export\folder2\2b.jpg"
copy "c:\TEST\import\folder2\c.jpg" "c:\TEST\export\folder2\3a.jpg"
copy "c:\TEST\import\folder2\c.jpg" "c:\TEST\export\folder2\3b.jpg"
copy "c:\TEST\import\folder3\a.jpg" "c:\TEST\export\folder3\1a.jpg"
copy "c:\TEST\import\folder3\a.jpg" "c:\TEST\export\folder3\1b.jpg"
copy "c:\TEST\import\folder3\b.jpg" "c:\TEST\export\folder3\2a.jpg"
copy "c:\TEST\import\folder3\b.jpg" "c:\TEST\export\folder3\2b.jpg"
copy "c:\TEST\import\folder3\c.jpg" "c:\TEST\export\folder3\3a.jpg"
copy "c:\TEST\import\folder3\c.jpg" "c:\TEST\export\folder3\3b.jpg"
mogrify -resize 400x300 "c:\TEST\export\folder1\1a.jpg"
mogrify -resize 200x150 "c:\TEST\export\folder1\1b.jpg"
mogrify -resize 400x300 "c:\TEST\export\folder1\2a.jpg"
mogrify -resize 200x150 "c:\TEST\export\folder1\2b.jpg"
mogrify -resize 400x300 "c:\TEST\export\folder1\3a.jpg"
mogrify -resize 200x150 "c:\TEST\export\folder1\3b.jpg"
mogrify -resize 400x300 "c:\TEST\export\folder2\1a.jpg"
mogrify -resize 200x150 "c:\TEST\export\folder2\1b.jpg"
mogrify -resize 400x300 "c:\TEST\export\folder2\2a.jpg"
mogrify -resize 200x150 "c:\TEST\export\folder2\2b.jpg"
mogrify -resize 400x300 "c:\TEST\export\folder2\3a.jpg"
mogrify -resize 200x150 "c:\TEST\export\folder2\3b.jpg"
mogrify -resize 400x300 "c:\TEST\export\folder3\1a.jpg"
mogrify -resize 200x150 "c:\TEST\export\folder3\1b.jpg"
mogrify -resize 400x300 "c:\TEST\export\folder3\2a.jpg"
mogrify -resize 200x150 "c:\TEST\export\folder3\2b.jpg"
mogrify -resize 400x300 "c:\TEST\export\folder3\3a.jpg"
mogrify -resize 200x150 "c:\TEST\export\folder3\3b.jpg"
...