В настоящее время я работаю над личным проектом, где мне нужно изменить размеры десятков тысяч файлов PNG. Я почти ничего не знаю о сценариях, PS или программировании (я художник-график)

Я использую программу под названием ImageResizer, которая изменяет размеры изображений.

Это программное обеспечение имеет параметры командной строки. Параметры, которые я использую:

/resize auto "XBR 2x <NoBlend>"

который берет мое изображение и использует алгоритм xBRx2, чтобы удвоить его размер. Именно этот вывод мне нужен.

На самом деле, у меня есть пакетный файл, который я взял с программного обеспечения Github, который делает именно то, что мне нужно, но только для одного изображения. Вот оно, для справки:

@echo off 
for %%F in (Input*.*) do ImageResizer-r129.exe /load "%%F" /resize auto "XBR 2x <NoBlend>" /save "Output\%%~nF%%~xF"

Вот моя дилемма. У меня, как я уже говорил, десятки тысяч этих изображений. И вы можете подумать "хорошо, что cmd может сделать это" ...

За исключением того, что эти png-файлы вложены в довольно обширный макет подкаталога ... и моя выходная папка должна поддерживать ту же компоновку подкаталогов, что и входные данные, чтобы работать с тем, что мне нужно.

Итак, чтобы объяснить, что мне нужно более четко ...

У меня есть папка INPUT. В этой папке несколько подпапок. И в каждой из этих папок есть больше папок ... как далеко они идут и имена этих папок различны. В конце концов, в конце каждой «ветки» находятся мои png-файлы, для обработки которых мне нужно программное обеспечение.

Итак, моя папка ввода выглядит примерно так:

L вход
L_ долото
L__ текстуры
L___ предметы
L____ one.png
L____ two.png
L___ модели
L____ one.png
L____ two.png
L_ артефакты
L__ текстуры
L___ предметы
L____ groupOne
L_____ one.png
L_____ two.png
L____ groupTwo
так далее

Как вы можете заметить из моего примера, нет единой структуры имен, и из того, что я мало знаю о скриптах, требуется рекурсивное переключение для захвата всех png-файлов.

Все PNG из этой входной папки должны быть переданы через ImageResizer.exe с моими параметрами.

Затем обработанные PNG должны быть выведены в папку «Выход» с той же разметкой поддиректории в качестве входных данных ...
поэтому Input/chisel/textures/items/one.png необходимо / сохранить в Output /chisel/textures/items/one.png и т. д. для каждого png в моей папке Input.

Кроме того, скрипт может просто перезаписать исходное изображение из папки ввода. В любом случае достигается одна и та же цель.

Вот мой текущий сценарий PS, который написал мой зять, но не смог завершить. http://pastebin.com/fveGJkRJ

Любая помощь очень ценится, так как мне нужно обработать около 18000 фунтов. Я начал просто копировать и вставлять свой пакетный скрипт снова и снова, заменяя каждый вход и выход каждым путем к файлу, но это потребляло слишком много времени.

1 ответ1

0

Вот скрипт powershell, который делает то, что вы хотите.
Поскольку у меня есть проблема с аргументами и цитированием (и без времени), он генерирует необходимые папки и командный файл со всеми аргументами для ImageResizer-r129.exe, вам придется выполнять отдельно.

$ImgRes= "ImageResizer-r129.exe"
$Input = "G:\Rebirth Gaming\ImageResizer\input\"
$output= "G:\Rebirth Gaming\ImageResizer\Output\"

$Len = $Input.Length

Set-Location $Input

Get-ChildItem *.png -file -recurse|
  ForEach {
    $OutPath = $Output+$($_.DirectoryName.Substring($Len))
    If (!(Test-Path $OutPath)) {MkDir $OutPath}
    "$ImgRes /load `"$_`" /resize auto `"XBR 2x <NoBlend>`" /save `"$OutPath\$($_.Name)`" "
} | Out-File $($Output+"Resize.cmd")

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .