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