Class: ImageOptim
- Inherits:
-
Object
- Object
- ImageOptim
- Defined in:
- lib/image_optim.rb,
lib/image_optim/space.rb,
lib/image_optim/config.rb,
lib/image_optim/runner.rb,
lib/image_optim/worker.rb,
lib/image_optim/handler.rb,
lib/image_optim/railtie.rb,
lib/image_optim/image_meta.rb,
lib/image_optim/image_path.rb,
lib/image_optim/worker/svgo.rb,
lib/image_optim/bin_resolver.rb,
lib/image_optim/hash_helpers.rb,
lib/image_optim/worker/jhead.rb,
lib/image_optim/worker/advpng.rb,
lib/image_optim/worker/pngout.rb,
lib/image_optim/option_helpers.rb,
lib/image_optim/true_false_nil.rb,
lib/image_optim/worker/optipng.rb,
lib/image_optim/worker/gifsicle.rb,
lib/image_optim/worker/jpegtran.rb,
lib/image_optim/worker/pngcrush.rb,
lib/image_optim/worker/pngquant.rb,
lib/image_optim/worker/jpegoptim.rb,
lib/image_optim/option_definition.rb,
lib/image_optim/configuration_error.rb,
lib/image_optim/non_negative_integer_range.rb,
lib/image_optim/bin_resolver/simple_version.rb,
lib/image_optim/bin_resolver/comparable_condition.rb
Overview
Main interface
Defined Under Namespace
Modules: HashHelpers, OptionHelpers, Space Classes: BinResolver, Config, ConfigurationError, Handler, ImageMeta, ImagePath, NonNegativeIntegerRange, OptionDefinition, Railtie, Runner, TrueFalseNil, Worker
Instance Attribute Summary collapse
-
#nice ⇒ Object
readonly
Nice level.
-
#threads ⇒ Object
readonly
Number of threads to run with.
-
#verbose ⇒ Object
readonly
Verbose output?.
Class Method Summary collapse
-
.full_version ⇒ Object
Full version of image_optim.
-
.method_missing(method, *args, &block) ⇒ Object
Optimization methods with default options.
-
.version ⇒ Object
Version of image_optim gem spec loaded.
Instance Method Summary collapse
-
#env_path ⇒ Object
Join resolve_dir, default path and vendor path for PATH environment variable.
-
#initialize(options = {}) ⇒ ImageOptim
constructor
Initialize workers, specify options using worker underscored name:.
-
#optimizable?(path) ⇒ Boolean
Are there workers for file at path?.
-
#optimize_image(original) ⇒ Object
Optimize one file, return new path as OptimizedImagePath or nil if optimization failed.
-
#optimize_image!(original) ⇒ Object
Optimize one file in place, return original as OptimizedImagePath or nil if optimization failed.
-
#optimize_image_data(original_data) ⇒ Object
Optimize image data, return new data or nil if optimization failed.
-
#optimize_images(paths, &block) ⇒ Object
Optimize multiple images if block given yields path and result for each image and returns array of yield results else return array of path and result pairs.
-
#optimize_images!(paths, &block) ⇒ Object
Optimize multiple images in place if block given yields path and result for each image and returns array of yield results else return array of path and result pairs.
-
#optimize_images_data(datas, &block) ⇒ Object
Optimize multiple image datas if block given yields original and result for each image data and returns array of yield results else return array of path and result pairs.
-
#resolve_bin!(bin) ⇒ Object
Check existance of binary, create symlink if ENV contains path for key XXX_BIN where XXX is upper case bin name.
-
#workers_for_image(path) ⇒ Object
Get workers for image.
Constructor Details
#initialize(options = {}) ⇒ ImageOptim
Initialize workers, specify options using worker underscored name:
pass false to disable worker
ImageOptim.new(:pngcrush => false)
or hash with options to worker
ImageOptim.new(:advpng => {:level => 3}, :optipng => {:level => 2})
use :threads to set number of parallel optimizers to run (passing true or nil determines number of processors, false disables parallel processing)
ImageOptim.new(:threads => 8)
use :nice to specify optimizers nice level (true or nil makes it 10, false makes it 0)
ImageOptim.new(:nice => 20)
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/image_optim.rb', line 40 def initialize( = {}) config = Config.new() @nice = config.nice @threads = config.threads @verbose = config.verbose if verbose $stderr << config $stderr << "Nice level: #{nice}\n" $stderr << "Using threads: #{threads}\n" end @bin_resolver = BinResolver.new(self) @workers_by_format = create_workers_by_format do |klass| config.for_worker(klass) end config. end |
Instance Attribute Details
#nice ⇒ Object (readonly)
Nice level
13 14 15 |
# File 'lib/image_optim.rb', line 13 def nice @nice end |
#threads ⇒ Object (readonly)
Number of threads to run with
16 17 18 |
# File 'lib/image_optim.rb', line 16 def threads @threads end |
#verbose ⇒ Object (readonly)
Verbose output?
19 20 21 |
# File 'lib/image_optim.rb', line 19 def verbose @verbose end |
Class Method Details
.full_version ⇒ Object
Full version of image_optim
145 146 147 |
# File 'lib/image_optim.rb', line 145 def self.full_version "image_optim v#{version}" end |
.method_missing(method, *args, &block) ⇒ Object
Optimization methods with default options
131 132 133 134 135 136 137 |
# File 'lib/image_optim.rb', line 131 def self.method_missing(method, *args, &block) if method_defined?(method) && method.to_s =~ /^optimize_image/ new.send(method, *args, &block) else super end end |
.version ⇒ Object
Version of image_optim gem spec loaded
140 141 142 |
# File 'lib/image_optim.rb', line 140 def self.version Gem.loaded_specs['image_optim'].version.to_s rescue 'DEV' end |
Instance Method Details
#env_path ⇒ Object
Join resolve_dir, default path and vendor path for PATH environment variable
161 162 163 |
# File 'lib/image_optim.rb', line 161 def env_path @bin_resolver.env_path end |
#optimizable?(path) ⇒ Boolean
Are there workers for file at path?
150 151 152 |
# File 'lib/image_optim.rb', line 150 def optimizable?(path) !!workers_for_image(path) end |
#optimize_image(original) ⇒ Object
Optimize one file, return new path as OptimizedImagePath or nil if optimization failed
68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/image_optim.rb', line 68 def optimize_image(original) original = ImagePath.convert(original) return unless (workers = workers_for_image(original)) result = Handler.for(original) do |handler| workers.each do |worker| handler.process do |src, dst| worker.optimize(src, dst) end end end return unless result ImagePath::Optimized.new(result, original) end |
#optimize_image!(original) ⇒ Object
Optimize one file in place, return original as OptimizedImagePath or nil if optimization failed
84 85 86 87 88 89 |
# File 'lib/image_optim.rb', line 84 def optimize_image!(original) original = ImagePath.convert(original) return unless (result = optimize_image(original)) result.replace(original) ImagePath::Optimized.new(original, result.original_size) end |
#optimize_image_data(original_data) ⇒ Object
Optimize image data, return new data or nil if optimization failed
92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/image_optim.rb', line 92 def optimize_image_data(original_data) = ImageMeta.for_data(original_data) return unless && .format ImagePath.temp_file %W[image_optim .#{.format}] do |temp| temp.binmode temp.write(original_data) temp.close if (result = optimize_image(temp.path)) result.open('rb', &:read) end end end |
#optimize_images(paths, &block) ⇒ Object
Optimize multiple images if block given yields path and result for each image and returns array of yield results else return array of path and result pairs
110 111 112 |
# File 'lib/image_optim.rb', line 110 def optimize_images(paths, &block) run_method_for(paths, :optimize_image, &block) end |
#optimize_images!(paths, &block) ⇒ Object
Optimize multiple images in place if block given yields path and result for each image and returns array of yield results else return array of path and result pairs
118 119 120 |
# File 'lib/image_optim.rb', line 118 def optimize_images!(paths, &block) run_method_for(paths, :optimize_image!, &block) end |
#optimize_images_data(datas, &block) ⇒ Object
Optimize multiple image datas if block given yields original and result for each image data and returns array of yield results else return array of path and result pairs
126 127 128 |
# File 'lib/image_optim.rb', line 126 def optimize_images_data(datas, &block) run_method_for(datas, :optimize_image_data, &block) end |
#resolve_bin!(bin) ⇒ Object
Check existance of binary, create symlink if ENV contains path for key XXX_BIN where XXX is upper case bin name
156 157 158 |
# File 'lib/image_optim.rb', line 156 def resolve_bin!(bin) @bin_resolver.resolve!(bin) end |