From c466391875b4fbafcec8d731fe6b9eef43ff1de0 Mon Sep 17 00:00:00 2001 From: Steve Jernigan Date: Thu, 23 May 2013 14:03:27 -0400 Subject: [PATCH 1/7] Utils for recursive usage --- Rakefile | 2 +- lib/image_squeeze.rb | 19 ++++++++++++++++++- lib/image_squeeze/result.rb | 8 +++++++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/Rakefile b/Rakefile index 2aee0dd..149d104 100644 --- a/Rakefile +++ b/Rakefile @@ -1,5 +1,5 @@ require 'rubygems' -require 'rake/gempackagetask' +require 'rubygems/package_task' require 'rake/testtask' require 'lib/image_squeeze' diff --git a/lib/image_squeeze.rb b/lib/image_squeeze.rb index 6f89f71..81cbc69 100644 --- a/lib/image_squeeze.rb +++ b/lib/image_squeeze.rb @@ -53,6 +53,23 @@ def initialize(options = {}) def self.default @processors = self.class.default_processors end + + def squeeze_dir(path, substantial = 0) + puts "filename,bytes_saved,original_size,percent_savings" + if path.directory? + path.each_child {|p| squeeze_dir(p)} + else + r = squeeze(path) + if r + if r.percent_savings > substantial + finalize_result(r) + puts "#{r.filename},#{r.bytes_saved},#{r.original_size},#{r.percent_savings * 100}%" + else + #puts "No substantial savings (#{r.percent_savings * 100}%) on #{r.filename}" + end + end + end + end def squeeze(filename) image_type = self.class.image_type(filename) @@ -66,7 +83,7 @@ def squeeze(filename) output_filename = tmp_filename(filename) processor_class.squeeze(filename, output_filename) output_file_size = File.size(output_filename) - result_options = { :filename => filename, :output_filename => output_filename, :bytes_saved => original_file_size - output_file_size, :output_extension => processor_class.output_extension } + result_options = { :filename => filename, :output_filename => output_filename, :original_size => original_file_size, :bytes_saved => original_file_size - output_file_size, :output_extension => processor_class.output_extension } Result.new(result_options) end.sort diff --git a/lib/image_squeeze/result.rb b/lib/image_squeeze/result.rb index cfd3f81..acde58f 100644 --- a/lib/image_squeeze/result.rb +++ b/lib/image_squeeze/result.rb @@ -1,12 +1,13 @@ class ImageSqueeze class Result - attr_reader :filename, :output_filename, :bytes_saved, :output_extension + attr_reader :filename, :output_filename, :bytes_saved, :output_extension, :original_size def initialize(options = {}) @filename = options[:filename] @output_filename = options[:output_filename] @bytes_saved = options[:bytes_saved] @output_extension = options[:output_extension] + @original_size = options[:original_size] end def optimized? @@ -16,5 +17,10 @@ def optimized? def <=>(other) self.bytes_saved <=> other.bytes_saved end + + def percent_savings + @bytes_saved.to_f/@original_size + end + end end \ No newline at end of file From 94b749a85b7897f36e355cede546993c332d4aa8 Mon Sep 17 00:00:00 2001 From: Steve Jernigan Date: Fri, 24 May 2013 14:54:52 -0400 Subject: [PATCH 2/7] Opps, dont want that header each time, the recursion should be in a different method --- lib/image_squeeze.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/image_squeeze.rb b/lib/image_squeeze.rb index 81cbc69..67aae91 100644 --- a/lib/image_squeeze.rb +++ b/lib/image_squeeze.rb @@ -55,7 +55,7 @@ def self.default end def squeeze_dir(path, substantial = 0) - puts "filename,bytes_saved,original_size,percent_savings" + #puts "filename,bytes_saved,original_size,percent_savings" if path.directory? path.each_child {|p| squeeze_dir(p)} else From 5d4e2fe51f9076c850432ee0e2c46b93902d12fd Mon Sep 17 00:00:00 2001 From: Steve Jernigan Date: Fri, 24 May 2013 16:55:42 -0400 Subject: [PATCH 3/7] Add JpegOptim to the list of available processors --- lib/image_squeeze.rb | 1 + lib/image_squeeze/processors/jpeg_optim_processor.rb | 11 +++++++++++ lib/image_squeeze/processors/png_crush_processor.rb | 3 ++- 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 lib/image_squeeze/processors/jpeg_optim_processor.rb diff --git a/lib/image_squeeze.rb b/lib/image_squeeze.rb index 67aae91..0827800 100644 --- a/lib/image_squeeze.rb +++ b/lib/image_squeeze.rb @@ -130,6 +130,7 @@ def self.default_processors end processors << OptiPNGProcessor if ImageSqueeze::Utils.image_utility_available?('optipng', 'png') processors << GifsicleProcessor if ImageSqueeze::Utils.image_utility_available?('gifsicle', 'animated gif') + processors << JpegOptimProcessor if ImageSqueeze::Utils.image_utility_available?('jpegoptim', 'jpg') if ImageSqueeze::Utils.image_utility_available?('jpegtran', 'jpeg') processors << JPEGTranProgressiveProcessor processors << JPEGTranNonProgressiveProcessor diff --git a/lib/image_squeeze/processors/jpeg_optim_processor.rb b/lib/image_squeeze/processors/jpeg_optim_processor.rb new file mode 100644 index 0000000..658a996 --- /dev/null +++ b/lib/image_squeeze/processors/jpeg_optim_processor.rb @@ -0,0 +1,11 @@ +class ImageSqueeze + class JpegOptimProcessor < Processor + def self.input_type + JPEG + end + + def self.squeeze(filename, output_filename) + system("jpegoptim --strip-all --dest=#{output_filename} #{filename} > /dev/null") + end + end +end \ No newline at end of file diff --git a/lib/image_squeeze/processors/png_crush_processor.rb b/lib/image_squeeze/processors/png_crush_processor.rb index 19d0e16..34989b2 100644 --- a/lib/image_squeeze/processors/png_crush_processor.rb +++ b/lib/image_squeeze/processors/png_crush_processor.rb @@ -3,7 +3,8 @@ class PNGCrushProcessor < Processor def self.input_type PNG end - + + #-rem alla will remove all known ancillary chunks def self.squeeze(filename, output_filename) system("pngcrush -rem alla -brute -reduce #{filename} #{output_filename} > /dev/null") end From 49da71d03de966084713ed94a1931aab4e6c92b6 Mon Sep 17 00:00:00 2001 From: Steve Jernigan Date: Fri, 24 May 2013 17:03:29 -0400 Subject: [PATCH 4/7] Include processor in results --- lib/image_squeeze.rb | 2 +- lib/image_squeeze/processors/optipng_processor.rb | 3 ++- lib/image_squeeze/result.rb | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/image_squeeze.rb b/lib/image_squeeze.rb index 0827800..79ef8fe 100644 --- a/lib/image_squeeze.rb +++ b/lib/image_squeeze.rb @@ -83,7 +83,7 @@ def squeeze(filename) output_filename = tmp_filename(filename) processor_class.squeeze(filename, output_filename) output_file_size = File.size(output_filename) - result_options = { :filename => filename, :output_filename => output_filename, :original_size => original_file_size, :bytes_saved => original_file_size - output_file_size, :output_extension => processor_class.output_extension } + result_options = { :processor => processor_class.to_s, :filename => filename, :output_filename => output_filename, :original_size => original_file_size, :bytes_saved => original_file_size - output_file_size, :output_extension => processor_class.output_extension } Result.new(result_options) end.sort diff --git a/lib/image_squeeze/processors/optipng_processor.rb b/lib/image_squeeze/processors/optipng_processor.rb index de7be30..d61e419 100644 --- a/lib/image_squeeze/processors/optipng_processor.rb +++ b/lib/image_squeeze/processors/optipng_processor.rb @@ -3,7 +3,8 @@ class OptiPNGProcessor < Processor def self.input_type PNG end - + + #i1 is interlaced, i0 is noninterlaced def self.squeeze(filename, output_filename) system("optipng -i1 -o7 #{filename} -out=#{output_filename} > /dev/null") end diff --git a/lib/image_squeeze/result.rb b/lib/image_squeeze/result.rb index acde58f..ce95440 100644 --- a/lib/image_squeeze/result.rb +++ b/lib/image_squeeze/result.rb @@ -1,6 +1,6 @@ class ImageSqueeze class Result - attr_reader :filename, :output_filename, :bytes_saved, :output_extension, :original_size + attr_reader :processor, :filename, :output_filename, :bytes_saved, :output_extension, :original_size def initialize(options = {}) @filename = options[:filename] @@ -8,6 +8,7 @@ def initialize(options = {}) @bytes_saved = options[:bytes_saved] @output_extension = options[:output_extension] @original_size = options[:original_size] + @processor = options[:processor] end def optimized? From 167e923381aa136f8a3c7cb225338e550655002c Mon Sep 17 00:00:00 2001 From: Steve Jernigan Date: Fri, 24 May 2013 17:08:05 -0400 Subject: [PATCH 5/7] Include processor and make squeeze_dir headers operate correctly --- lib/image_squeeze.rb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/image_squeeze.rb b/lib/image_squeeze.rb index 79ef8fe..4781b5e 100644 --- a/lib/image_squeeze.rb +++ b/lib/image_squeeze.rb @@ -54,8 +54,12 @@ def self.default @processors = self.class.default_processors end - def squeeze_dir(path, substantial = 0) - #puts "filename,bytes_saved,original_size,percent_savings" + def squeeze_dir(path, substantial = 0.03) + puts "filename,output_filename,bytes_saved,original_size,percent_savings,processor" + squeeze_dir_recursive(path,substantial) + end + + def squeeze_dir_recursive(path, substantial = 0.03) if path.directory? path.each_child {|p| squeeze_dir(p)} else @@ -63,9 +67,9 @@ def squeeze_dir(path, substantial = 0) if r if r.percent_savings > substantial finalize_result(r) - puts "#{r.filename},#{r.bytes_saved},#{r.original_size},#{r.percent_savings * 100}%" + puts "#{r.filename},#{r.output_filename},#{r.bytes_saved},#{r.original_size},#{r.percent_savings * 100}%,#{r.processor}" else - #puts "No substantial savings (#{r.percent_savings * 100}%) on #{r.filename}" + puts "-No substantial savings (#{r.percent_savings * 100}%) on #{r.filename}" end end end From f57afc87e1e7d07acfd482d871574ad21eaf53aa Mon Sep 17 00:00:00 2001 From: Steve Jernigan Date: Fri, 24 May 2013 17:15:10 -0400 Subject: [PATCH 6/7] Make squeeze_dir headers operate correctly again --- lib/image_squeeze.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/image_squeeze.rb b/lib/image_squeeze.rb index 4781b5e..98a4505 100644 --- a/lib/image_squeeze.rb +++ b/lib/image_squeeze.rb @@ -61,7 +61,7 @@ def squeeze_dir(path, substantial = 0.03) def squeeze_dir_recursive(path, substantial = 0.03) if path.directory? - path.each_child {|p| squeeze_dir(p)} + path.each_child {|p| squeeze_dir_recursive(p)} else r = squeeze(path) if r From 6405ae4c1feffd10b826eb3c531cb7e2b2de870b Mon Sep 17 00:00:00 2001 From: Steve Jernigan Date: Thu, 13 Jun 2013 12:34:14 -0400 Subject: [PATCH 7/7] add in new processor require --- lib/image_squeeze.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/image_squeeze.rb b/lib/image_squeeze.rb index 98a4505..0bef1c8 100644 --- a/lib/image_squeeze.rb +++ b/lib/image_squeeze.rb @@ -13,6 +13,7 @@ require 'image_squeeze/processors/png_crush_processor' require 'image_squeeze/processors/jpeg_tran_progressive_processor' require 'image_squeeze/processors/jpeg_tran_non_progressive_processor' +require 'image_squeeze/processors/jpeg_optim_processor' require 'image_squeeze/processors/gifsicle_processor' require 'image_squeeze/processors/gif_to_png_processor' require 'image_squeeze/processors/optipng_processor'