Class: ImageOptim::Worker::Gifsicle

Inherits:
ImageOptim::Worker show all
Defined in:
lib/image_optim/worker/gifsicle.rb

Overview

Constant Summary collapse

INTERLACE_OPTION =
option(:interlace, false, TrueFalseNil, 'Interlace: '\
    '`true` - interlace on, '\
    '`false` - interlace off, '\
    '`nil` - as is in original image '\
    '(defaults to running two instances, one with interlace off and '\
    'one with on)') do |v|
  TrueFalseNil.convert(v)
end
LEVEL_OPTION =
option(:level, 3, 'Compression level: '\
    '`1` - light and fast, '\
    '`2` - normal, '\
    '`3` - heavy (slower)') do |v|
  OptionHelpers.limit_with_range(v.to_i, 1..3)
end
CAREFUL_OPTION =
option(:careful, false, 'Avoid bugs with some software'){ |v| !!v }

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from ImageOptim::Worker

#image_formats, #initialize, #inspect, #optimized?, #options, #resolve_used_bins!, #run_order, #used_bins

Methods included from ClassMethods

#bin_sym, #create_all, #create_all_by_format, extended, #inherited, #klasses, #option, #option_definitions

Constructor Details

This class inherits a constructor from ImageOptim::Worker

Class Method Details

.init(image_optim, options = {}) ⇒ Object

If interlace specified initialize one instance Otherwise initialize two, one with interlace off and one with on


9
10
11
12
13
14
15
# File 'lib/image_optim/worker/gifsicle.rb', line 9

def self.init(image_optim, options = {})
  return super if options.key?(:interlace)

  [false, true].map do |interlace|
    new(image_optim, options.merge(:interlace => interlace))
  end
end

Instance Method Details

#optimize(src, dst) ⇒ Object


38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/image_optim/worker/gifsicle.rb', line 38

def optimize(src, dst)
  args = %W[
    --output=#{dst}
    --no-comments
    --no-names
    --same-delay
    --same-loopcount
    --no-warnings
    --
    #{src}
  ]

  if resolve_bin!(:gifsicle).version >= '1.85'
    args.unshift '--no-extensions', '--no-app-extensions'
  end

  unless interlace.nil?
    args.unshift interlace ? '--interlace' : '--no-interlace'
  end
  args.unshift '--careful' if careful
  args.unshift "--optimize=#{level}" if level
  execute(:gifsicle, *args) && optimized?(src, dst)
end