如何在Windows上PNGCrush整个PNG目录树?

时间:2011-06-29 08:10:21

标签: java php recursion pngcrush

问题几乎就是标题中提到的内容。

我有很多MapTiler创建的PNG文件。确切地说是24083个文件。它们位于许多文件夹中,在许多文件夹中,即文件夹树,duh。事实上,手动PNGCrush所有这些是最浪费时间。

有人有算法分享给我吗?一个可以递归粉碎所有这些PNG的东西?

我有一台Windows PC,并希望用Java或PHP比而不是其他语言(因为我已经很清楚了)但是其他的东西可能还不错。

谢谢!

3 个答案:

答案 0 :(得分:11)

您不需要任何特殊功能,只需在Windows命令提示符中使用FOR命令即可​​。

使用此行:

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

"yourdir"是存储输入文件的根目录。

最后两个%f

  • 第一个是输入文件名
  • 第二个是输出文件名

-ow option added in 1.7.22进行就地操作:

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

有关FOR的详细信息,请参阅this page

答案 1 :(得分:1)

程序'sweep'http://users.csc.calpoly.edu/~bfriesen/software/files/sweep32.zip允许您以递归方式对目录中的所有文件运行相同的命令。

答案 2 :(得分:1)

请参阅:RecursiveIteratorIterator RecursiveDirectoryIterator exec(或类似)

您可以使用:

$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('%your-top-directory%'));
foreach ($it as $entry) {
  if (strtolower($entry->getExtension()) == 'png') {
     // execute command here
  }
}