TinyPNG 官方網(wǎng)址:https://tinypng.com 是一個(gè)非常不錯(cuò)的圖片壓縮工具扎狱,在保持alpha通道的情況下對(duì)PNG的壓縮可以達(dá)到1/3之內(nèi)梧田,而且用肉眼基本上分辨不出壓縮的損失。
=begin
https://tinypng.com/developers/reference/ruby
調(diào)用tinypng的API對(duì)png和jpg格式的圖片進(jìn)行批量壓縮
將TINIFYKEY換成自己申請(qǐng)的key
使用時(shí)需要指定要壓縮的文件夾
ruby tinypng.rb images
壓縮后會(huì)直接覆蓋原有的圖片,壓縮前請(qǐng)自行備份原圖
壓縮失敗的圖片會(huì)保存在ARGV[0]_Failure文件夾下
=end
require 'fileutils'
require 'tinify'
#tinyPNG的key,https://tinypng.com/developers
TINIFYKEY = ""
Tinify.key = TINIFYKEY
TINIPNGFAILPATH = `pwd`.chomp + "/" + ARGV[0] + "_Failure/"
#創(chuàng)建一個(gè)保存壓縮失敗圖片的文件夾
def createFilurePath
if !File.directory? TINIPNGFAILPATH
Dir.mkdir TINIPNGFAILPATH
end
end
#調(diào)用tinypng的API進(jìn)行圖片壓縮
def tinify(imgPath, imgName)
puts "#{imgName}開(kāi)始?jí)嚎s"
begin
source = Tinify.from_file imgPath
source.to_file imgPath
rescue
createFilurePath
p = `pwd`.chomp + "/" + imgPath
copyP = TINIPNGFAILPATH + imgName
FileUtils.cp p, copyP
puts "#{imgName}壓縮失敗 #{$!}"
end
end
def tinifyImage(path)
Dir.foreach path do |entry|
if entry == "." || entry == ".." || entry == ".DS_Store" #如果是這三個(gè)文件直接跳過(guò)
next
end
p = "#{path}/#{entry}" #文件的路徑
if File.file? p
if (p.end_with? ".png") || (p.end_with? ".jpg") #tinify只能壓縮png和jpg格式的圖片
tinify p, entry
end
end
end
end
if ARGV[0]
tinifyImage ARGV[0]
else
puts "請(qǐng)指定文件夾"
end