discourse_image_optim 0.24.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.appveyor.yml +46 -0
- data/.gitignore +18 -0
- data/.rubocop.yml +110 -0
- data/.travis.yml +42 -0
- data/CHANGELOG.markdown +316 -0
- data/CONTRIBUTING.markdown +11 -0
- data/Gemfile +16 -0
- data/LICENSE.txt +20 -0
- data/README.markdown +358 -0
- data/Vagrantfile +38 -0
- data/bin/image_optim +28 -0
- data/image_optim.gemspec +34 -0
- data/lib/image_optim.rb +267 -0
- data/lib/image_optim/bin_resolver.rb +142 -0
- data/lib/image_optim/bin_resolver/bin.rb +115 -0
- data/lib/image_optim/bin_resolver/comparable_condition.rb +60 -0
- data/lib/image_optim/bin_resolver/error.rb +6 -0
- data/lib/image_optim/bin_resolver/simple_version.rb +31 -0
- data/lib/image_optim/cache.rb +72 -0
- data/lib/image_optim/cache_path.rb +16 -0
- data/lib/image_optim/cmd.rb +122 -0
- data/lib/image_optim/config.rb +219 -0
- data/lib/image_optim/configuration_error.rb +3 -0
- data/lib/image_optim/handler.rb +57 -0
- data/lib/image_optim/hash_helpers.rb +45 -0
- data/lib/image_optim/image_meta.rb +20 -0
- data/lib/image_optim/non_negative_integer_range.rb +11 -0
- data/lib/image_optim/optimized_path.rb +25 -0
- data/lib/image_optim/option_definition.rb +38 -0
- data/lib/image_optim/option_helpers.rb +17 -0
- data/lib/image_optim/path.rb +70 -0
- data/lib/image_optim/runner.rb +139 -0
- data/lib/image_optim/runner/glob_helpers.rb +45 -0
- data/lib/image_optim/runner/option_parser.rb +246 -0
- data/lib/image_optim/space.rb +29 -0
- data/lib/image_optim/true_false_nil.rb +16 -0
- data/lib/image_optim/worker.rb +170 -0
- data/lib/image_optim/worker/advpng.rb +37 -0
- data/lib/image_optim/worker/class_methods.rb +107 -0
- data/lib/image_optim/worker/gifsicle.rb +65 -0
- data/lib/image_optim/worker/jhead.rb +47 -0
- data/lib/image_optim/worker/jpegoptim.rb +63 -0
- data/lib/image_optim/worker/jpegrecompress.rb +49 -0
- data/lib/image_optim/worker/jpegtran.rb +48 -0
- data/lib/image_optim/worker/optipng.rb +53 -0
- data/lib/image_optim/worker/pngcrush.rb +56 -0
- data/lib/image_optim/worker/pngout.rb +40 -0
- data/lib/image_optim/worker/pngquant.rb +61 -0
- data/lib/image_optim/worker/svgo.rb +34 -0
- data/script/template/jquery-2.1.3.min.js +4 -0
- data/script/template/sortable-0.6.0.min.js +2 -0
- data/script/template/worker_analysis.erb +254 -0
- data/script/update_worker_options_in_readme +59 -0
- data/script/worker_analysis +589 -0
- data/spec/image_optim/bin_resolver/comparable_condition_spec.rb +37 -0
- data/spec/image_optim/bin_resolver/simple_version_spec.rb +65 -0
- data/spec/image_optim/bin_resolver_spec.rb +290 -0
- data/spec/image_optim/cache_path_spec.rb +57 -0
- data/spec/image_optim/cache_spec.rb +162 -0
- data/spec/image_optim/cmd_spec.rb +93 -0
- data/spec/image_optim/config_spec.rb +254 -0
- data/spec/image_optim/handler_spec.rb +90 -0
- data/spec/image_optim/hash_helpers_spec.rb +74 -0
- data/spec/image_optim/image_meta_spec.rb +61 -0
- data/spec/image_optim/optimized_path_spec.rb +58 -0
- data/spec/image_optim/option_definition_spec.rb +138 -0
- data/spec/image_optim/option_helpers_spec.rb +25 -0
- data/spec/image_optim/path_spec.rb +103 -0
- data/spec/image_optim/runner/glob_helpers_spec.rb +21 -0
- data/spec/image_optim/runner/option_parser_spec.rb +105 -0
- data/spec/image_optim/space_spec.rb +23 -0
- data/spec/image_optim/worker/optipng_spec.rb +102 -0
- data/spec/image_optim/worker/pngquant_spec.rb +67 -0
- data/spec/image_optim/worker_spec.rb +303 -0
- data/spec/image_optim_spec.rb +259 -0
- data/spec/images/broken_jpeg +1 -0
- data/spec/images/comparison.png +0 -0
- data/spec/images/decompressed.jpeg +0 -0
- data/spec/images/icecream.gif +0 -0
- data/spec/images/image.jpg +0 -0
- data/spec/images/invisiblepixels/generate +24 -0
- data/spec/images/invisiblepixels/image.png +0 -0
- data/spec/images/lena.jpg +0 -0
- data/spec/images/orient/0.jpg +0 -0
- data/spec/images/orient/1.jpg +0 -0
- data/spec/images/orient/2.jpg +0 -0
- data/spec/images/orient/3.jpg +0 -0
- data/spec/images/orient/4.jpg +0 -0
- data/spec/images/orient/5.jpg +0 -0
- data/spec/images/orient/6.jpg +0 -0
- data/spec/images/orient/7.jpg +0 -0
- data/spec/images/orient/8.jpg +0 -0
- data/spec/images/orient/generate +23 -0
- data/spec/images/orient/original.jpg +0 -0
- data/spec/images/quant/64.png +0 -0
- data/spec/images/quant/generate +25 -0
- data/spec/images/rails.png +0 -0
- data/spec/images/test.svg +3 -0
- data/spec/images/transparency1.png +0 -0
- data/spec/images/transparency2.png +0 -0
- data/spec/images/vergroessert.jpg +0 -0
- data/spec/spec_helper.rb +93 -0
- metadata +281 -0
@@ -0,0 +1,11 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
* Create topic/feature branch: `git checkout -b awesome-changes`
|
4
|
+
* Commit…
|
5
|
+
* Add entry at the top of [ChangeLog](CHANGELOG.markdown)
|
6
|
+
* Run tests: `bundle exec rspec`
|
7
|
+
* Check code style: `bundle exec rubocop`
|
8
|
+
* Rebase on master and squash commits to logical units
|
9
|
+
* Push your branch: `git push origin awesome-changes`
|
10
|
+
* Create pull request
|
11
|
+
* Check if [travis is happy](https://travis-ci.org/toy/image_optim/pull_requests)
|
data/Gemfile
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gemspec
|
4
|
+
|
5
|
+
if ENV['CODECLIMATE']
|
6
|
+
group :test do
|
7
|
+
gem 'simplecov'
|
8
|
+
|
9
|
+
gem 'codeclimate-test-reporter'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
if RUBY_VERSION >= '2.0'
|
14
|
+
gem 'travis_check_rubies', '~> 0.2'
|
15
|
+
gem 'rainbow', '!= 2.2.1' # TODO: remove when sickill/rainbow#44 is resolved
|
16
|
+
end
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2012-2017 Ivan Kuchin
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.markdown
ADDED
@@ -0,0 +1,358 @@
|
|
1
|
+
[![Gem Version](https://img.shields.io/gem/v/image_optim.svg?style=flat)](https://rubygems.org/gems/image_optim)
|
2
|
+
[![Build Status](https://img.shields.io/travis/toy/image_optim/master.svg?style=flat)](https://travis-ci.org/toy/image_optim)
|
3
|
+
[![AppVeyor Status](https://img.shields.io/appveyor/ci/toy/image-optim/master.svg?style=flat&label=windows)](https://ci.appveyor.com/project/toy/image-optim)
|
4
|
+
[![Code Climate](https://img.shields.io/codeclimate/github/toy/image_optim.svg?style=flat)](https://codeclimate.com/github/toy/image_optim)
|
5
|
+
[![Code Climate Coverage](https://img.shields.io/codeclimate/coverage/github/toy/image_optim.svg?style=flat)](https://codeclimate.com/github/toy/image_optim)
|
6
|
+
[![Dependency Status](https://img.shields.io/gemnasium/toy/image_optim.svg?style=flat)](https://gemnasium.com/toy/image_optim)
|
7
|
+
[![Inch CI](https://inch-ci.org/github/toy/image_optim.svg?branch=master&style=flat)](https://inch-ci.org/github/toy/image_optim)
|
8
|
+
|
9
|
+
# image_optim
|
10
|
+
|
11
|
+
Optimize (lossless compress, optionally lossy) images (jpeg, png, gif, svg) using external utilities:
|
12
|
+
|
13
|
+
* [advpng](http://advancemame.sourceforge.net/doc-advpng.html) from [AdvanceCOMP](http://advancemame.sourceforge.net/comp-readme.html)
|
14
|
+
(will use [zopfli](https://code.google.com/p/zopfli/) on default/maximum level 4)
|
15
|
+
* [gifsicle](http://www.lcdf.org/gifsicle/)
|
16
|
+
* [jhead](http://www.sentex.net/~mwandel/jhead/)
|
17
|
+
* [jpegoptim](http://www.kokkonen.net/tjko/projects.html)
|
18
|
+
* [jpeg-recompress](https://github.com/danielgtaylor/jpeg-archive#jpeg-recompress)
|
19
|
+
* jpegtran from [Independent JPEG Group's JPEG library](http://www.ijg.org/)
|
20
|
+
* [optipng](http://optipng.sourceforge.net/)
|
21
|
+
* [pngcrush](http://pmt.sourceforge.net/pngcrush/)
|
22
|
+
* [pngout](http://www.advsys.net/ken/util/pngout.htm)
|
23
|
+
* [pngquant](http://pngquant.org/)
|
24
|
+
* [svgo](https://github.com/svg/svgo)
|
25
|
+
|
26
|
+
Based on [ImageOptim.app](http://imageoptim.com/).
|
27
|
+
|
28
|
+
Documentation for [latest version](http://rubydoc.info/gems/image_optim/frames) and [master](http://rubydoc.info/github/toy/image_optim/master/frames).
|
29
|
+
|
30
|
+
## Gem installation
|
31
|
+
|
32
|
+
```sh
|
33
|
+
gem install image_optim
|
34
|
+
```
|
35
|
+
|
36
|
+
You may also want to install [`image_optim_pack`](https://github.com/toy/image_optim_pack) (see [Binaries pack](#binaries-pack)).
|
37
|
+
|
38
|
+
```sh
|
39
|
+
gem install image_optim_pack
|
40
|
+
```
|
41
|
+
|
42
|
+
### Bundler
|
43
|
+
|
44
|
+
Add to your `Gemfile`:
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
gem 'image_optim'
|
48
|
+
```
|
49
|
+
|
50
|
+
With `image_optim_pack`:
|
51
|
+
|
52
|
+
```ruby
|
53
|
+
gem 'image_optim'
|
54
|
+
gem 'image_optim_pack'
|
55
|
+
```
|
56
|
+
|
57
|
+
With version:
|
58
|
+
|
59
|
+
<!---<update-version>-->
|
60
|
+
```ruby
|
61
|
+
gem 'image_optim', '~> 0.24'
|
62
|
+
```
|
63
|
+
<!---</update-version>-->
|
64
|
+
|
65
|
+
If you want to check latest changes:
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
gem 'image_optim', :git => 'git://github.com/toy/image_optim.git'
|
69
|
+
```
|
70
|
+
|
71
|
+
## Binaries location
|
72
|
+
|
73
|
+
Simplest way for `image_optim` to locate binaries is to install them in common location present in `PATH` (see [Binaries installation](#binaries-installation)).
|
74
|
+
|
75
|
+
If you cannot install to common location, then install to custom one and add it to `PATH`.
|
76
|
+
|
77
|
+
Specify custom bin location using `XXX_BIN` environment variable (`JPEGOPTIM_BIN`, `OPTIPNG_BIN`, …).
|
78
|
+
|
79
|
+
Besides permanently setting environment variables in `~/.profile`, `~/.bash_profile`, `~/.bashrc`, `~/.zshrc`, … they can be set:
|
80
|
+
|
81
|
+
* before command:
|
82
|
+
|
83
|
+
`PATH="/custom/location:$PATH" image_optim *.jpg`
|
84
|
+
|
85
|
+
for example:
|
86
|
+
|
87
|
+
`PATH="/Applications/ImageOptim.app/Contents/MacOS:$PATH" image_optim *.jpg`
|
88
|
+
|
89
|
+
* inside script:
|
90
|
+
|
91
|
+
`ENV['PATH'] = "/custom/location:#{ENV['PATH']}"; ImageOptim.optimize_images([…])`
|
92
|
+
|
93
|
+
for example:
|
94
|
+
|
95
|
+
`ENV['PATH'] = "/Applications/ImageOptim.app/Contents/MacOS:#{ENV['PATH']}"; ImageOptim.optimize_images([…])`
|
96
|
+
|
97
|
+
## Binaries installation
|
98
|
+
|
99
|
+
### Binaries pack
|
100
|
+
|
101
|
+
Easiest way to get latest versions of most binaries for `image_optim` for Linux, Mac OS X, FreeBSD and OpenBSD is by installing [`image_optim_pack`](https://github.com/toy/image_optim_pack) gem.
|
102
|
+
|
103
|
+
Check installation instructions in [Gem installation](#gem-installation) section.
|
104
|
+
|
105
|
+
Pack doesn't include `pngout` and `svgo` binaries, their installation instructions are provided below.
|
106
|
+
|
107
|
+
### Linux - Debian/Ubuntu
|
108
|
+
|
109
|
+
```bash
|
110
|
+
sudo apt-get install -y advancecomp gifsicle jhead jpegoptim libjpeg-progs optipng pngcrush pngquant
|
111
|
+
```
|
112
|
+
|
113
|
+
If you get an old version of `pngquant`, please check how to install up-to-date version or compile from source at [http://pngquant.org/](http://pngquant.org/).
|
114
|
+
|
115
|
+
### Linux - RHEL/Fedora/Centos
|
116
|
+
|
117
|
+
```bash
|
118
|
+
sudo yum install -y advancecomp gifsicle jhead libjpeg optipng pngquant
|
119
|
+
```
|
120
|
+
|
121
|
+
You may also need to install `libjpeg-turbo-utils` instead of `libjpeg`:
|
122
|
+
|
123
|
+
```bash
|
124
|
+
sudo yum install -y libjpeg-turbo-utils
|
125
|
+
```
|
126
|
+
|
127
|
+
You will also need to install `jpegoptim` and `pngcrush` from source:
|
128
|
+
|
129
|
+
#### jpegoptim
|
130
|
+
|
131
|
+
Replace `X.Y.Z` with latest version number from http://www.kokkonen.net/tjko/projects.html#jpegoptim.
|
132
|
+
|
133
|
+
```bash
|
134
|
+
JPEGOPTIM_VERSION=X.Y.Z
|
135
|
+
cd /tmp
|
136
|
+
curl -O http://www.kokkonen.net/tjko/src/jpegoptim-$JPEGOPTIM_VERSION.tar.gz
|
137
|
+
tar zxf jpegoptim-$JPEGOPTIM_VERSION.tar.gz
|
138
|
+
cd jpegoptim-$JPEGOPTIM_VERSION
|
139
|
+
./configure && make && make install
|
140
|
+
```
|
141
|
+
|
142
|
+
#### pngcrush
|
143
|
+
|
144
|
+
Replace `X.Y.Z` with latest version number from http://sourceforge.net/projects/pmt/files/pngcrush/.
|
145
|
+
|
146
|
+
```bash
|
147
|
+
PNGCRUSH_VERSION=X.Y.Z
|
148
|
+
cd /tmp
|
149
|
+
curl -O http://iweb.dl.sourceforge.net/project/pmt/pngcrush/$PNGCRUSH_VERSION/pngcrush-$PNGCRUSH_VERSION.tar.gz
|
150
|
+
tar zxf pngcrush-$PNGCRUSH_VERSION.tar.gz
|
151
|
+
cd pngcrush-$PNGCRUSH_VERSION
|
152
|
+
make && cp -f pngcrush /usr/local/bin
|
153
|
+
```
|
154
|
+
|
155
|
+
### OS X: Macports
|
156
|
+
|
157
|
+
```bash
|
158
|
+
sudo port install advancecomp gifsicle jhead jpegoptim jpeg optipng pngcrush pngquant
|
159
|
+
```
|
160
|
+
|
161
|
+
### OS X: Brew
|
162
|
+
|
163
|
+
```bash
|
164
|
+
brew install advancecomp gifsicle jhead jpegoptim jpeg optipng pngcrush pngquant jonof/kenutils/pngout
|
165
|
+
```
|
166
|
+
|
167
|
+
### pngout installation (optional)
|
168
|
+
|
169
|
+
If you installed the dependencies via brew, pngout should be installed already. Otherwise, you can install `pngout` by downloading and installing the [binary versions](http://www.jonof.id.au/kenutils).
|
170
|
+
|
171
|
+
_Note: pngout is free to use even in commercial soft, but you can not redistribute, repackage or reuse it without consent and agreement of creator. [license](http://advsys.net/ken/utils.htm#pngoutkziplicense)_
|
172
|
+
|
173
|
+
### svgo installation (optional)
|
174
|
+
|
175
|
+
`svgo` is available from NPM.
|
176
|
+
|
177
|
+
```bash
|
178
|
+
npm install -g svgo
|
179
|
+
```
|
180
|
+
|
181
|
+
### jpeg-recompress installation (optional)
|
182
|
+
|
183
|
+
Download and install the `jpeg-recompress` binary from the [JPEG-Archive Releases](https://github.com/danielgtaylor/jpeg-archive/releases) page,
|
184
|
+
or follow the instructions to [build from source](https://github.com/danielgtaylor/jpeg-archive#building).
|
185
|
+
|
186
|
+
## Usage
|
187
|
+
|
188
|
+
### From shell
|
189
|
+
|
190
|
+
```sh
|
191
|
+
image_optim *.{jpg,png,gif,svg}
|
192
|
+
|
193
|
+
image_optim -r .
|
194
|
+
|
195
|
+
image_optim -h
|
196
|
+
```
|
197
|
+
|
198
|
+
### From ruby
|
199
|
+
|
200
|
+
Initialize optimizer (or you can call optimization methods directly on `ImageOptim`):
|
201
|
+
|
202
|
+
```ruby
|
203
|
+
image_optim = ImageOptim.new
|
204
|
+
|
205
|
+
image_optim = ImageOptim.new(:pngout => false)
|
206
|
+
|
207
|
+
image_optim = ImageOptim.new(:nice => 20)
|
208
|
+
```
|
209
|
+
|
210
|
+
Optimize image getting temp path:
|
211
|
+
|
212
|
+
```ruby
|
213
|
+
image_optim.optimize_image('a.png')
|
214
|
+
```
|
215
|
+
|
216
|
+
Optimize image in place:
|
217
|
+
|
218
|
+
```ruby
|
219
|
+
image_optim.optimize_image!('b.jpg')
|
220
|
+
```
|
221
|
+
|
222
|
+
Optimize image data:
|
223
|
+
|
224
|
+
```ruby
|
225
|
+
image_optim.optimize_image_data(data)
|
226
|
+
```
|
227
|
+
|
228
|
+
Multiple images:
|
229
|
+
|
230
|
+
```ruby
|
231
|
+
image_optim.optimize_images(Dir['*.png']) do |unoptimized, optimized|
|
232
|
+
if optimized
|
233
|
+
puts "#{unoptimized} => #{optimized}"
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
image_optim.optimize_images!(Dir['*.*'])
|
238
|
+
|
239
|
+
image_optim.optimize_images_data(datas)
|
240
|
+
```
|
241
|
+
|
242
|
+
### From rails
|
243
|
+
|
244
|
+
Rails image assets optimization is extracted into [image\_optim\_rails gem](https://github.com/toy/image_optim_rails).
|
245
|
+
|
246
|
+
## Configuration
|
247
|
+
|
248
|
+
Configuration in YAML format will be read and prepended to options from two paths:
|
249
|
+
|
250
|
+
* `$XDG_CONFIG_HOME/image_optim.yml` (by default `~/.config/image_optim.yml`)
|
251
|
+
* `.image_optim.yml` in current working directory
|
252
|
+
|
253
|
+
Paths can be changed using `:config_paths` option and `--config-paths` argument.
|
254
|
+
|
255
|
+
Example configuration:
|
256
|
+
|
257
|
+
```yaml
|
258
|
+
nice: 20
|
259
|
+
pngout: false # disable
|
260
|
+
optipng:
|
261
|
+
level: 5
|
262
|
+
```
|
263
|
+
|
264
|
+
## Options
|
265
|
+
|
266
|
+
* `:nice` — Nice level, priority of all used tools with higher value meaning lower priority, in range `-20..19`, negative values can be set only if run by root user *(defaults to `10`)*
|
267
|
+
* `:threads` — Number of threads or disable *(defaults to number of processors)*
|
268
|
+
* `:verbose` — Verbose output *(defaults to `false`)*
|
269
|
+
* `:pack` — Require image\_optim\_pack or disable it, by default image\_optim\_pack will be used if available, will turn on `:skip-missing-workers` unless explicitly disabled *(defaults to `nil`)*
|
270
|
+
* `:skip_missing_workers` — Skip workers with missing or problematic binaries *(defaults to `false`)*
|
271
|
+
* `:allow_lossy` — Allow lossy workers and optimizations *(defaults to `false`)*
|
272
|
+
* `:cache_dir` — Configure cache directory
|
273
|
+
* `:cache_worker_digests` - Also cache worker digests along with original file digest and worker options: updating workers invalidates cache
|
274
|
+
* `:timeout` — Number of seconds before workers are timed out. Must be greater than 0 to enable timeout. *(defaults to `0`)*
|
275
|
+
|
276
|
+
Worker can be disabled by passing `false` instead of options hash or by setting option `:disable` to `true`.
|
277
|
+
|
278
|
+
<!---<worker-options>-->
|
279
|
+
<!-- markdown for worker options is generated by `script/update_worker_options_in_readme` -->
|
280
|
+
|
281
|
+
### advpng:
|
282
|
+
* `:level` — Compression level: `0` - don't compress, `1` - fast, `2` - normal, `3` - extra, `4` - extreme *(defaults to `4`)*
|
283
|
+
* `:timeout` — Number of seconds before worker is timed out. Must be greater than 0 to enable timeout. *(defaults to `0`)*
|
284
|
+
|
285
|
+
### gifsicle:
|
286
|
+
* `:interlace` — 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)
|
287
|
+
* `:level` — Compression level: `1` - light and fast, `2` - normal, `3` - heavy (slower) *(defaults to `3`)*
|
288
|
+
* `:careful` — Avoid bugs with some software *(defaults to `false`)*
|
289
|
+
* `:timeout` — Number of seconds before worker is timed out. Must be greater than 0 to enable timeout. *(defaults to `0`)*
|
290
|
+
|
291
|
+
### jhead:
|
292
|
+
* `:timeout` — Number of seconds before worker is timed out. Must be greater than 0 to enable timeout. *(defaults to `0`)*
|
293
|
+
|
294
|
+
### jpegoptim:
|
295
|
+
* `:allow_lossy` — Allow limiting maximum quality *(defaults to `false`)*
|
296
|
+
* `:strip` — List of extra markers to strip: `:comments`, `:exif`, `:iptc`, `:icc` or `:all` *(defaults to `:all`)*
|
297
|
+
* `:max_quality` — Maximum image quality factor `0`..`100`, ignored in default/lossless mode *(defaults to `100`)*
|
298
|
+
* `:timeout` — Number of seconds before worker is timed out. Must be greater than 0 to enable timeout. *(defaults to `0`)*
|
299
|
+
|
300
|
+
### jpegrecompress:
|
301
|
+
* `:allow_lossy` — Allow worker, it is always lossy *(defaults to `false`)*
|
302
|
+
* `:quality` — JPEG quality preset: `0` - low, `1` - medium, `2` - high, `3` - veryhigh *(defaults to `3`)*
|
303
|
+
* `:timeout` — Number of seconds before worker is timed out. Must be greater than 0 to enable timeout. *(defaults to `0`)*
|
304
|
+
|
305
|
+
### jpegtran:
|
306
|
+
* `:copy_chunks` — Copy all chunks *(defaults to `false`)*
|
307
|
+
* `:progressive` — Create progressive JPEG file *(defaults to `true`)*
|
308
|
+
* `:jpegrescan` — Use jpegtran through jpegrescan, ignore progressive option *(defaults to `false`)*
|
309
|
+
* `:timeout` — Number of seconds before worker is timed out. Must be greater than 0 to enable timeout. *(defaults to `0`)*
|
310
|
+
|
311
|
+
### optipng:
|
312
|
+
* `:level` — Optimization level preset: `0` is least, `7` is best *(defaults to `6`)*
|
313
|
+
* `:interlace` — Interlace: `true` - interlace on, `false` - interlace off, `nil` - as is in original image *(defaults to `false`)*
|
314
|
+
* `:strip` — Remove all auxiliary chunks *(defaults to `true`)*
|
315
|
+
* `:timeout` — Number of seconds before worker is timed out. Must be greater than 0 to enable timeout. *(defaults to `0`)*
|
316
|
+
|
317
|
+
### pngcrush:
|
318
|
+
* `:chunks` — List of chunks to remove or `:alla` - all except tRNS/transparency or `:allb` - all except tRNS and gAMA/gamma *(defaults to `:alla`)*
|
319
|
+
* `:fix` — Fix otherwise fatal conditions such as bad CRCs *(defaults to `false`)*
|
320
|
+
* `:brute` — Brute force try all methods, very time-consuming and generally not worthwhile *(defaults to `false`)*
|
321
|
+
* `:blacken` — Blacken fully transparent pixels *(defaults to `true`)*
|
322
|
+
* `:timeout` — Number of seconds before worker is timed out. Must be greater than 0 to enable timeout. *(defaults to `0`)*
|
323
|
+
|
324
|
+
### pngout:
|
325
|
+
* `:copy_chunks` — Copy optional chunks *(defaults to `false`)*
|
326
|
+
* `:strategy` — Strategy: `0` - xtreme, `1` - intense, `2` - longest Match, `3` - huffman Only, `4` - uncompressed *(defaults to `0`)*
|
327
|
+
* `:timeout` — Number of seconds before worker is timed out. Must be greater than 0 to enable timeout. *(defaults to `0`)*
|
328
|
+
|
329
|
+
### pngquant:
|
330
|
+
* `:allow_lossy` — Allow quality option *(defaults to `false`)*
|
331
|
+
* `:quality` — min..max - don't save below min, use less colors below max (both in range `0..100`; in yaml - `!ruby/range 0..100`), ignored in default/lossless mode *(defaults to `100..100`, `0..100` in lossy mode)*
|
332
|
+
* `:speed` — speed/quality trade-off: `1` - slow, `3` - default, `11` - fast & rough *(defaults to `3`)*
|
333
|
+
* `:timeout` — Number of seconds before worker is timed out. Must be greater than 0 to enable timeout. *(defaults to `0`)*
|
334
|
+
|
335
|
+
### svgo:
|
336
|
+
* `:disable_plugins` — List of plugins to disable *(defaults to `[]`)*
|
337
|
+
* `:enable_plugins` — List of plugins to enable *(defaults to `[]`)*
|
338
|
+
* `:timeout` — Number of seconds before worker is timed out. Must be greater than 0 to enable timeout. *(defaults to `0`)*
|
339
|
+
|
340
|
+
<!---</worker-options>-->
|
341
|
+
|
342
|
+
## Contributing
|
343
|
+
|
344
|
+
[List](https://github.com/toy/image_optim/graphs/contributors) of contributors to `image_optim`.
|
345
|
+
|
346
|
+
If you would like to contribute - that is great and you are very welcome. Please check few notes in file [CONTRIBUTING.markdown](CONTRIBUTING.markdown).
|
347
|
+
|
348
|
+
Financial contributions can be made via [gratipay](https://gratipay.com/toy/).
|
349
|
+
|
350
|
+
[![Support via Gratipay](https://cdn.rawgit.com/gratipay/gratipay-badge/2.1.2/dist/gratipay.png)](https://gratipay.com/toy/)
|
351
|
+
|
352
|
+
## ChangeLog
|
353
|
+
|
354
|
+
In separate file [CHANGELOG.markdown](CHANGELOG.markdown).
|
355
|
+
|
356
|
+
## Copyright
|
357
|
+
|
358
|
+
Copyright (c) 2012-2017 Ivan Kuchin. See [LICENSE.txt](LICENSE.txt) for details.
|
data/Vagrantfile
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
Vagrant.configure('2') do |config|
|
2
|
+
config.vm.box = 'ubuntu/precise64'
|
3
|
+
|
4
|
+
config.vm.provision 'shell', :inline => <<-SH
|
5
|
+
set -e
|
6
|
+
|
7
|
+
cd /vagrant
|
8
|
+
|
9
|
+
echo 'apt-get update...'
|
10
|
+
apt-get update > /dev/null
|
11
|
+
|
12
|
+
echo 'Install git, imagemagick, ruby1.9.1-dev...'
|
13
|
+
apt-get install -y git npm imagemagick ruby1.9.1-dev > /dev/null
|
14
|
+
|
15
|
+
echo 'Install node, npm...'
|
16
|
+
curl -sL https://deb.nodesource.com/setup | sudo bash - > /dev/null
|
17
|
+
sudo apt-get install -y nodejs > /dev/null
|
18
|
+
|
19
|
+
echo 'Update rubygems...'
|
20
|
+
REALLY_GEM_UPDATE_SYSTEM=x gem update --system > /dev/null
|
21
|
+
|
22
|
+
echo 'Install bundler...'
|
23
|
+
gem install bundler > /dev/null
|
24
|
+
|
25
|
+
echo 'Install svgo...'
|
26
|
+
npm install -g -q svgo > /dev/null
|
27
|
+
|
28
|
+
echo 'Install pngout...'
|
29
|
+
curl -s \
|
30
|
+
'http://static.jonof.id.au/dl/kenutils/pngout-20130221-linux.tar.gz' | \
|
31
|
+
tar -xz -C /usr/local/bin --strip-components 2 \
|
32
|
+
--wildcards '*/x86_64/pngout'
|
33
|
+
|
34
|
+
echo 'Bundle...'
|
35
|
+
bundle install --jobs=3 --quiet
|
36
|
+
bundle list
|
37
|
+
SH
|
38
|
+
end
|
data/bin/image_optim
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
require 'image_optim/runner'
|
5
|
+
require 'image_optim/runner/option_parser'
|
6
|
+
|
7
|
+
args = ARGV.dup
|
8
|
+
|
9
|
+
options = ImageOptim::Runner::OptionParser.parse!(args)
|
10
|
+
|
11
|
+
begin
|
12
|
+
if options[:verbose]
|
13
|
+
$stderr.puts ImageOptim.full_version
|
14
|
+
end
|
15
|
+
|
16
|
+
only_info = options.delete(:only_info)
|
17
|
+
runner = ImageOptim::Runner.new(options)
|
18
|
+
unless only_info
|
19
|
+
abort 'specify paths to optimize' if args.empty?
|
20
|
+
abort unless runner.run!(args)
|
21
|
+
end
|
22
|
+
rescue => e
|
23
|
+
if options[:verbose]
|
24
|
+
abort "#{e}\n#{e.backtrace.join("\n")}"
|
25
|
+
else
|
26
|
+
abort e.to_s
|
27
|
+
end
|
28
|
+
end
|