Как PNGCrush целое дерево каталогов PNG в Windows? - PullRequest
3 голосов
/ 29 июня 2011

Вопрос в значительной степени задается в заголовке.

У меня есть много файлов PNG, созданных MapTiler. 24083 файла, если быть точным. Они находятся во многих папках, которые находятся во многих папках, то есть в дереве папок. Дело в том, что это самая большая трата времени, чтобы вручную выполнить PNGCrush.

Кто-нибудь есть алгоритм, чтобы поделиться для меня, пожалуйста? Тот, который может рекурсивно сокрушить все эти PNG?

У меня есть ПК с Windows, и я бы хотел, чтобы он был , скорее на Java или PHP, чем на другом языке (поскольку я уже хорошо это знаю).

Спасибо!

Ответы [ 3 ]

11 голосов
/ 29 июня 2011

Для этого вам не нужно ничего особенного, просто используйте команду FOR в командной строке Windows.

Используйте эту строку:

FOR /R "yourdir" %f IN (*.png) DO pngcrush "%f" "%f.crushed.png"

"yourdir" - этокорневой каталог, в котором хранятся входные файлы.

Два %f в конце:

  • Первый - это имя входного файла
  • Вторым является выходное имя файла

-ow, добавленное в 1.7.22 для выполнения операции на месте:

FOR /R "yourdir" %f IN (*.png) DO pngcrush -ow "%f"

См. эта страница для получения дополнительной информации FOR.

1 голос
/ 29 июня 2011

См .: RecursiveIteratorIterator с RecursiveDirectoryIterator и exec (или аналогичным)

С этим вы можете использовать:

$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('%your-top-directory%'));
foreach ($it as $entry) {
  if (strtolower($entry->getExtension()) == 'png') {
     // execute command here
  }
}
1 голос
/ 29 июня 2011

Программа Sweep http://users.csc.calpoly.edu/~bfriesen/software/files/sweep32.zip позволяет рекурсивно запускать одну и ту же команду для всех файлов в каталоге.

...