image_optimizer 1.6.1 → 1.7.0
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/README.md +14 -1
- data/checksum/image_optimizer-1.7.0.gem.sha512 +1 -0
- data/lib/image_optimizer.rb +2 -0
- data/lib/image_optimizer/pngquant_optimizer.rb +31 -0
- data/lib/image_optimizer/version.rb +1 -1
- data/spec/image_optimizer/pngquant_optimizer_spec.rb +59 -0
- metadata +6 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad635514a39378a2f01e3dd15515cf9433b341bd
|
4
|
+
data.tar.gz: 3612dc1b7da6cd2e19603f5c82c8a8e259ccd0a9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 59de349a631136309aa0d97942c49ffb76ca39c249187e91850dd949471c23a16bd85b3e4fef1c0c6ada72f442f01d86c58ce6b75efc68449f83a8dcb5cc4027
|
7
|
+
data.tar.gz: 16d02acc88a30773dbed18dc3f7594faa26004dbc8bcfb9491237fd9b737cc8b73efd427f26b482e4518e8c56e710a676384a7fbf30c9cf4a8315416e6db07b6
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/README.md
CHANGED
@@ -24,10 +24,12 @@ Tested against ruby 2.0.x, 2.1.x, 2.2.x, 2.3.x, and ruby-head
|
|
24
24
|
|
25
25
|
3. Gifsicle, which can be installed from [www.lcdf.org/gifsicle/](https://www.lcdf.org/gifsicle/)
|
26
26
|
|
27
|
+
4. Pngquant, which can be installed from [pngquant.org]https://pngquant.org/
|
28
|
+
|
27
29
|
Or install the utilities via homebrew:
|
28
30
|
|
29
31
|
```bash
|
30
|
-
$ brew install optipng jpegoptim gifsicle
|
32
|
+
$ brew install optipng jpegoptim gifsicle pngquant
|
31
33
|
```
|
32
34
|
|
33
35
|
Then add this line to your application's Gemfile:
|
@@ -56,6 +58,13 @@ performs PNG integrity checks and corrections.
|
|
56
58
|
ImageOptimizer.new('path/to/file.png').optimize
|
57
59
|
```
|
58
60
|
|
61
|
+
Pngquant is a command-line utility and a library for lossy compression of PNG images.
|
62
|
+
The conversion reduces file sizes significantly (often as much as 70%) and preserves full alpha transparency. Generated images are compatible with all modern web browsers, and have better fallback in IE6 than 24-bit PNGs.
|
63
|
+
|
64
|
+
```ruby
|
65
|
+
PNGQuantOptimizer.new('path/to/file.png').optimize
|
66
|
+
```
|
67
|
+
|
59
68
|
#### Optimize JPEG formats:
|
60
69
|
|
61
70
|
jpegoptim provides lossless optimization for JPEG files based on optimizing the Huffman tables.
|
@@ -107,6 +116,10 @@ optimizer will ignore the value.
|
|
107
116
|
ImageOptimizer.new('path/to/file.png', level: 3).optimize
|
108
117
|
```
|
109
118
|
|
119
|
+
Pngquant is called with the '--skip-if-larger', '--speed 1','--force', '--verbose', '--ext .png' flags.
|
120
|
+
This runs pngquant on all png files in the current directory and subdirectory and optimized them in place. Flag '--skip-if-larger' skips images which are smaller. Flag '--ext .png' set custom extension (suffix) for output filename. By default -or8.png or -fs8.png is used.
|
121
|
+
|
122
|
+
|
110
123
|
##### Don't Remove metadata from PNG
|
111
124
|
|
112
125
|
By default, `optipng` is called with the `-strip all` flag, which removes all the
|
@@ -0,0 +1 @@
|
|
1
|
+
fe9e49e0b6c275d15ced45c3b860ec8cf1c1379278a12d12f1fd8aa10641911ff86715f3f9f8603e4e2a93c2815b6c396d252b0c17e49dcf54584803237a9feb
|
data/lib/image_optimizer.rb
CHANGED
@@ -4,6 +4,7 @@ require 'image_optimizer/image_optimizer_base'
|
|
4
4
|
require 'image_optimizer/jpeg_optimizer'
|
5
5
|
require 'image_optimizer/png_optimizer'
|
6
6
|
require 'image_optimizer/gif_optimizer'
|
7
|
+
require 'image_optimizer/pngquant_optimizer'
|
7
8
|
|
8
9
|
class ImageOptimizer
|
9
10
|
include Shell
|
@@ -18,6 +19,7 @@ class ImageOptimizer
|
|
18
19
|
identify_format if options[:identify]
|
19
20
|
JPEGOptimizer.new(path, options).optimize
|
20
21
|
PNGOptimizer.new(path, options).optimize
|
22
|
+
PNGQuantOptimizer.new(path, options).optimize
|
21
23
|
GIFOptimizer.new(path, options).optimize
|
22
24
|
end
|
23
25
|
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class ImageOptimizer
|
2
|
+
class PNGQuantOptimizer < ImageOptimizerBase
|
3
|
+
|
4
|
+
private
|
5
|
+
|
6
|
+
def command_options
|
7
|
+
flags = ['--skip-if-larger', '--speed 1',
|
8
|
+
'--force', '--verbose', '--ext .png']
|
9
|
+
flags << quantity
|
10
|
+
flags << path
|
11
|
+
end
|
12
|
+
|
13
|
+
def quantity
|
14
|
+
return "--quality 100" unless (0..100).include?(options[:quality])
|
15
|
+
"--quality #{options[:quality]}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def extensions
|
19
|
+
%w[png]
|
20
|
+
end
|
21
|
+
|
22
|
+
def type
|
23
|
+
'png'
|
24
|
+
end
|
25
|
+
|
26
|
+
def bin_name
|
27
|
+
'pngquant'
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ImageOptimizer::PNGQuantOptimizer do
|
4
|
+
describe '#optimize' do
|
5
|
+
let(:options) { {} }
|
6
|
+
let(:pngquant_optimizer) { ImageOptimizer::PNGQuantOptimizer.new('/path/to/file.png', options) }
|
7
|
+
after { ImageOptimizer::PNGQuantOptimizer.instance_variable_set(:@bin, nil) }
|
8
|
+
subject { pngquant_optimizer.optimize }
|
9
|
+
|
10
|
+
context 'pngquant optimizing utility is installed' do
|
11
|
+
before do
|
12
|
+
allow(ImageOptimizer::PNGQuantOptimizer).to receive(:which).and_return('/usr/local/bin/pngquant')
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'optimizes the png' do
|
16
|
+
optimizer_options = %w[--skip-if-larger --speed\ 1 --force --verbose --ext\ .png --quality\ 100 /path/to/file.png]
|
17
|
+
expect(pngquant_optimizer).to receive(:system).with('/usr/local/bin/pngquant', *optimizer_options)
|
18
|
+
subject
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'ENV variable path to pngquant' do
|
22
|
+
let(:image_pngquant_bin_path) { '/app/vendor/bundle/ruby/2.0.0/gems/image_pngquant_bin-0.0.2/bin/pngquant' }
|
23
|
+
before do
|
24
|
+
ENV['PNGQUANT_BIN'] = image_pngquant_bin_path
|
25
|
+
end
|
26
|
+
after do
|
27
|
+
ENV['PNGQUANT_BIN'] = nil
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should optimize using the given path' do
|
31
|
+
optimizer_options = %w[--skip-if-larger --speed\ 1 --force --verbose --ext\ .png --quality\ 100 /path/to/file.png]
|
32
|
+
expect(pngquant_optimizer).to receive(:system).with(image_pngquant_bin_path, *optimizer_options)
|
33
|
+
subject
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'with quality parameter' do
|
38
|
+
let(:options) { { :quality => 100 } }
|
39
|
+
|
40
|
+
it 'optimizes the png with the quality' do
|
41
|
+
optimizer_options = %w[--skip-if-larger --speed\ 1 --force --verbose --ext\ .png --quality\ 100 /path/to/file.png]
|
42
|
+
expect(pngquant_optimizer).to receive(:system).with('/usr/local/bin/pngquant', *optimizer_options)
|
43
|
+
subject
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'optimizing utility is not installed' do
|
49
|
+
before do
|
50
|
+
allow(ImageOptimizer::PNGQuantOptimizer).to receive(:which).and_return(nil)
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'warns the user if the png' do
|
54
|
+
expect(pngquant_optimizer).to receive(:warn).with('Attempting to optimize a png without pngquant installed. Skipping...')
|
55
|
+
subject
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: image_optimizer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Julian Tescher
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
8lVFrLvGNGPCLQmEf498hBYT99EVYiuiI0F7YlTmBdzL1uwTMk5le/b0NguYdSJ7
|
31
31
|
qKlUP9usSwMVc+qmaOg1EYfPGYvt63qS
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date: 2016-
|
33
|
+
date: 2016-11-15 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: rspec
|
@@ -127,17 +127,20 @@ files:
|
|
127
127
|
- checksum/image_optimizer-1.5.0.gem.sha512
|
128
128
|
- checksum/image_optimizer-1.6.0.gem.sha512
|
129
129
|
- checksum/image_optimizer-1.6.1.gem.sha512
|
130
|
+
- checksum/image_optimizer-1.7.0.gem.sha512
|
130
131
|
- image_optimizer.gemspec
|
131
132
|
- lib/image_optimizer.rb
|
132
133
|
- lib/image_optimizer/gif_optimizer.rb
|
133
134
|
- lib/image_optimizer/image_optimizer_base.rb
|
134
135
|
- lib/image_optimizer/jpeg_optimizer.rb
|
135
136
|
- lib/image_optimizer/png_optimizer.rb
|
137
|
+
- lib/image_optimizer/pngquant_optimizer.rb
|
136
138
|
- lib/image_optimizer/shell.rb
|
137
139
|
- lib/image_optimizer/version.rb
|
138
140
|
- spec/image_optimizer/gif_optimizer_spec.rb
|
139
141
|
- spec/image_optimizer/jpeg_optimizer_spec.rb
|
140
142
|
- spec/image_optimizer/png_optimizer_spec.rb
|
143
|
+
- spec/image_optimizer/pngquant_optimizer_spec.rb
|
141
144
|
- spec/image_optimizer/shell_spec.rb
|
142
145
|
- spec/image_optimizer/version_spec.rb
|
143
146
|
- spec/image_optimizer_spec.rb
|
@@ -170,6 +173,7 @@ test_files:
|
|
170
173
|
- spec/image_optimizer/gif_optimizer_spec.rb
|
171
174
|
- spec/image_optimizer/jpeg_optimizer_spec.rb
|
172
175
|
- spec/image_optimizer/png_optimizer_spec.rb
|
176
|
+
- spec/image_optimizer/pngquant_optimizer_spec.rb
|
173
177
|
- spec/image_optimizer/shell_spec.rb
|
174
178
|
- spec/image_optimizer/version_spec.rb
|
175
179
|
- spec/image_optimizer_spec.rb
|
metadata.gz.sig
CHANGED
Binary file
|