读书人

运用pngout批量压缩png

发布时间: 2012-12-18 12:43:41 作者: rapoo

使用pngout批量压缩png

pngout是一个基于命令行的对png进行极限压缩的程序,它会去除软件在生成png时加入的额外信息,所以压缩的时候是无损压缩,可以有效降低png容量,又不用担心会失真。

?

pngout可以在这里下载和查看文档:http://advsys.net/ken/util/pngout.htm

?

在命令行里这样使用pngout:

?

D:/pngout.exe sourcepath resultpath

?

第二个参数可以省略,这样会直接覆盖原来的文件。

?

可以用ruby配合pngout来批量处理png图片,其实只需要加一个文件遍历,然后在ruby中调用命令行命令即可:

?

    require 'find'    require 'fileutils'    source, result = "D:/source/", "D:/result/"    Find.find(source) do |file|      if(!File.directory?(file) && File.extname(file) == ".png")        IO.popen("d:/pngout.exe " + file + " " + result + File.basename(file)) { |f| puts "converting..." + file}        end    end

?

平时用到一两个png的时候,去操作命令行或者运行ruby脚本都很麻烦,那干嘛不做一个自动压缩的脚本呢?

?

原理很简单,设置一个文件夹,用ruby遍历它,例如3秒遍历一次,发现有文件被修改或者增加了文件,就把文件压缩一下。

?

如此这般,就自动化了,在你保存png之后,只需要等一小会,即可被压缩好,中间不用任何多余操作。

?

判断文件是否被修改是根据文件最后修改时间来的。

?

    require 'find'    require 'fileutils'    dir = "d:/source";    time_record = {}    def pngout dirname      if(!File.directory?(dirname) && File.extname(dirname) == ".png")        IO.popen("d:/pngout.exe " + dirname) { |f| puts "converting..." + dirname }      end    end    begin      Find.find(dir) do |file|        begin          if (!time_record.has_key?(file))            pngout(file)            time_record[file] = File.mtime(file)          else             if(time_record[file] != File.mtime(file))              pngout(file)              time_record[file] = File.mtime(file)            end          end        rescue        end      end    end while sleep 3

?

读书人网 >编程

热点推荐