module CarrierWave::OptimizeImage::ImageOptimizer
Public Class Methods
optimize(path, opts = {})
click to toggle source
# File lib/carrierwave/optimize_image/image_optimizer.rb, line 7 def optimize(path, opts = {}) raise NotFoundPngquant if `which pngquant` == "" raise NotFoundJpegoptim if `which jpegoptim` == "" optimize_for(path, opts) end
Private Class Methods
mimetype(path)
click to toggle source
# File lib/carrierwave/optimize_image/image_optimizer.rb, line 22 def mimetype(path) IO.popen(["file", "--brief", "--mime-type", path], in: :close, err: :close) { |io| io.read.chomp.sub(/image\//, "") } end
optimize_for(path, opts)
click to toggle source
# File lib/carrierwave/optimize_image/image_optimizer.rb, line 15 def optimize_for(path, opts) case mimetype(path) when "jpeg" then optimize_jpg(path, opts) when "png" then optimize_png(path, opts) end end
optimize_jpg(path, opts = {})
click to toggle source
# File lib/carrierwave/optimize_image/image_optimizer.rb, line 38 def optimize_jpg(path, opts = {}) options = { verbose: false, quality: 100 }.merge!(opts) quality = (0..100).include?(options[:quality]) ? options[:quality] : 100 vo = options[:verbose] ? "--verbose" : "--quiet" path.gsub!(/([\(\)\[\]\{\}\*\?\\])/, '\\\\\1') system! "jpegoptim --force --max=#{quality} #{vo} #{path}" end
optimize_png(path, opts = {})
click to toggle source
# File lib/carrierwave/optimize_image/image_optimizer.rb, line 30 def optimize_png(path, opts = {}) options = { verbose: false, quality: 100 }.merge!(opts) quality = (0..100).include?(options[:quality]) ? options[:quality] : 100 vo = options[:verbose] ? " --verbose" : "--quiet" path.gsub!(/([\(\)\[\]\{\}\*\?\\])/, '\\\\\1') system! "pngquant --quality #{quality} #{vo} #{path}" end
system!(*args)
click to toggle source
# File lib/carrierwave/optimize_image/image_optimizer.rb, line 26 def system!(*args) system(*args) || abort("\n== Command #{args} failed ==") end