squeezem 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. data/README +8 -1
  2. data/lib/squeezem.rb +59 -11
  3. metadata +4 -4
data/README CHANGED
@@ -2,9 +2,16 @@ List pngs which are bigger than they need to be. Can optionally
2
2
  compress them, but is designed mainly to keep an eye on a tree of
3
3
  images to make sure they stay in good shape.
4
4
 
5
+ Prerequisites
6
+
7
+ At least one of pngcrush or jpegran.
8
+
9
+ On Mac:
10
+
11
+ sudo port install pngcrush jpeg
12
+
5
13
  Install
6
14
 
7
- install pngcrush
8
15
  sudo gem install squeezem
9
16
 
10
17
  Usage
data/lib/squeezem.rb CHANGED
@@ -7,6 +7,7 @@ require 'fileutils'
7
7
  class Squeezem
8
8
  def initialize(options)
9
9
  @options = options
10
+ find_helpers
10
11
  @total_bytes = 0
11
12
  @saved_bytes = 0
12
13
  @files_seen = 0
@@ -25,6 +26,22 @@ class Squeezem
25
26
  }
26
27
  end
27
28
 
29
+ def find_helpers
30
+ @helpers = {}
31
+ @helpers[:png] = 1 if command_exists?("pngcrush")
32
+ @helpers[:jpg] = 1 if command_exists?("jpegtran")
33
+ if @helpers.size == 0
34
+ $stderr.puts "Can't find any helpers - please install at least one of pngcrush or jpegtran!"
35
+ exit 1
36
+ end
37
+ end
38
+
39
+ def command_exists?(command)
40
+ system("which #{command} >/dev/null 2>/dev/null")
41
+ return false if $?.exitstatus == 127
42
+ return true
43
+ end
44
+
28
45
  def make_output_dir
29
46
  begin
30
47
  Dir.mktmpdir
@@ -38,7 +55,11 @@ class Squeezem
38
55
  end
39
56
 
40
57
  def squeeze(path)
41
- return unless valid_file?(path)
58
+ file_type = get_file_type(path)
59
+ unless valid_file_type?(file_type)
60
+ @files_ignored += 1
61
+ return
62
+ end
42
63
  @files_seen += 1
43
64
  @path = path
44
65
  @size = File.size(path)
@@ -52,10 +73,7 @@ class Squeezem
52
73
  end
53
74
  end
54
75
  end
55
- output = ''
56
- Open3.popen3('pngcrush', '-quiet', '-rem', 'alla', '-reduce', '-brute', path, @output_path) do |stdin, stdout, stderr|
57
- output = stdout.read
58
- end
76
+ output = process_file(path, file_type)
59
77
  if File.exist?(@output_path)
60
78
  new_size = File.size(@output_path)
61
79
  if new_size == 0
@@ -64,19 +82,49 @@ class Squeezem
64
82
  end
65
83
  saving = @size - new_size
66
84
  record_saving(saving)
67
- @files[canonical_path] = OpenStruct.new(:size => @size, :saving => saving)
68
85
  keep_or_remove_output
86
+ if @options.squeezem
87
+ cache_saving = 0
88
+ cache_size = new_size
89
+ else
90
+ cache_saving = saving
91
+ cache_size = @size
92
+ end
93
+ @files[canonical_path] = OpenStruct.new(:size => cache_size, :saving => cache_saving)
69
94
  else
70
95
  $stderr.puts "Error processing #{path}:", output
71
96
  end
72
97
  end
73
98
 
74
- def valid_file?(path)
75
- if !(path =~ /\.(png)$/)
76
- @files_ignored += 1
77
- return false
99
+ def get_file_type(path)
100
+ extension = File.extname(path).sub('.', '')
101
+ if extension.empty?
102
+ return nil
103
+ else
104
+ return extension.to_sym
78
105
  end
79
- return true
106
+ end
107
+
108
+ def valid_file_type?(type)
109
+ @helpers[type]
110
+ end
111
+
112
+ def process_file(path, file_type)
113
+ output = ''
114
+ case file_type
115
+ when :png
116
+ Open3.popen3('pngcrush', '-quiet', '-rem', 'alla', '-reduce', '-brute', path, @output_path) do |stdin, stdout, stderr|
117
+ output = stdout.read
118
+ end
119
+ when :jpg
120
+ File.open(@output_path, "w") do |out|
121
+ Open3.popen3('jpegtran', '-copy', 'none', '-optimize', '-perfect', path) do |stdin, stdout, stderr|
122
+ out.write(stdout.read)
123
+ output = stderr.read
124
+ end
125
+ end
126
+ end
127
+ return output
80
128
  end
81
129
 
82
130
  def keep_or_remove_output
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: squeezem
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 29
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 2
10
- version: 0.1.2
9
+ - 3
10
+ version: 0.1.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Steve Woodcock
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-23 00:00:00 +01:00
18
+ date: 2010-08-24 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies: []
21
21