image_optim 0.27.1 → 0.28.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b8d7c83b1d36f1cb0c41866cf421a8477632c43137749f2011b2520854de859d
4
- data.tar.gz: 3030f2377d510cc964025e3497dfb2bc860bd560fa88e33acc97e3caaa56614c
3
+ metadata.gz: 818160db3036f1fd4305077d943e59991aebe5fb1023b3c7e46db02e63c5fb37
4
+ data.tar.gz: 76c76ec43a5c05b9e35de21757928ec8793709a3db27e8a982cc46612f8d491e
5
5
  SHA512:
6
- metadata.gz: 3df3a7cd3606e03dc16fd7aed023e40f61e5c4b688707a39240cc67b5432b9705fbb2c33df9ec8a1da96e4408d7a5270b6a181415647e53c686565f45b5c2bd4
7
- data.tar.gz: b19684e4d13d29e6ac52e3ba5cddb38a6716f9acfae9946962ab45582a38e49c6c42018387d66e75a5f52d7153e12cf4a9e9dc10388f6d36bd4834d5a5e78ee0
6
+ metadata.gz: f30e6f493be6ff4e98407bb611d8fd868733af14da078b225b6708c7f6aabaa41d00b08e82c3801c788bd70c4d7278ee91a186a3dc54bc7bdcc16e685d27c7a8
7
+ data.tar.gz: b3402efe19eeb298518cfeb117f38c7aca1e0bbabe68313663107269d3ab87f8900f238db182042377adb5ebc12f69dd133ee5c922fcbde54c4b647bc9efa836
@@ -7,7 +7,6 @@ cache:
7
7
  - $(npm root)
8
8
  - ~/bin
9
9
  rvm:
10
- - '1.8.7-p374'
11
10
  - '1.9.3-p551'
12
11
  - '2.0.0-p648'
13
12
  - '2.1.10'
@@ -16,7 +15,7 @@ rvm:
16
15
  - '2.4.10'
17
16
  - '2.5.8'
18
17
  - '2.6.6'
19
- - '2.7.1'
18
+ - '2.7.2'
20
19
  - 'jruby-9.2.11.1'
21
20
  script:
22
21
  - bundle exec image_optim --info
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## unreleased
4
4
 
5
+ ## v0.28.0 (2020-12-18)
6
+
7
+ * Fix and update list of markers in jpegoptim worker: allow to pass `com` instead of incorrect `comments` and add missing `xmp` and `none` [#188](https://github.com/toy/image_optim/issues/188) [@toy](https://github.com/toy)
8
+ * Add `--skip-if-larger` flag to pngquant worker. The pngquant worker already does this, but this will make it fail faster. [#125](https://github.com/toy/image_optim/pull/125) [#181](https://github.com/toy/image_optim/pull/181) [@iggant](https://github.com/iggant) [@oblakeerickson](https://github.com/oblakeerickson)
9
+ * Add `method` option for jpegrecompress, default to `ssim` [#102](https://github.com/toy/image_optim/issues/102) [#103](https://github.com/toy/image_optim/pull/103) [#182](https://github.com/toy/image_optim/pull/182) [@ramiroaraujo](https://github.com/ramiroaraujo) [@oblakeerickson](https://github.com/oblakeerickson)
10
+
5
11
  ## v0.27.1 (2020-09-30)
6
12
 
7
13
  * Fixed atomic replacement for case when equal `File::Stat#dev` doesn't mean that file can be linked [#180](https://github.com/toy/image_optim/issues/180) [@toy](https://github.com/toy)
@@ -2,7 +2,10 @@
2
2
 
3
3
  * Create topic/feature branch: `git checkout -b awesome-changes`
4
4
  * Commit…
5
- * Add entry at the top of [ChangeLog](CHANGELOG.markdown)
5
+ * Add an entry at the top (after ## unreleased) of [ChangeLog](CHANGELOG.markdown), include:
6
+ * Issues (`[#123](https://github.com/toy/image_optim/issues/123)`)
7
+ * Pull requests (`[#123](https://github.com/toy/image_optim/pull/123)`)
8
+ * Authors (`[@octocat](https://github.com/octocat)`)
6
9
  * Run tests: `bundle exec rspec`
7
10
  * Check code style: `bundle exec rubocop`
8
11
  * Rebase on master and squash commits to logical units
@@ -60,7 +60,7 @@ With version:
60
60
 
61
61
  <!---<update-version>-->
62
62
  ```ruby
63
- gem 'image_optim', '~> 0.27'
63
+ gem 'image_optim', '~> 0.28'
64
64
  ```
65
65
  <!---</update-version>-->
66
66
 
@@ -310,12 +310,13 @@ Worker has no options
310
310
 
311
311
  ### jpegoptim:
312
312
  * `:allow_lossy` — Allow limiting maximum quality *(defaults to `false`)*
313
- * `:strip` — List of extra markers to strip: `:comments`, `:exif`, `:iptc`, `:icc` or `:all` *(defaults to `:all`)*
313
+ * `:strip` — List of markers to strip: `:com`, `:exif`, `:iptc`, `:icc`, `:xmp`, `:none` or `:all` *(defaults to `:all`)*
314
314
  * `:max_quality` — Maximum image quality factor `0`..`100`, ignored in default/lossless mode *(defaults to `100`)*
315
315
 
316
316
  ### jpegrecompress:
317
317
  * `:allow_lossy` — Allow worker, it is always lossy *(defaults to `false`)*
318
318
  * `:quality` — JPEG quality preset: `0` - low, `1` - medium, `2` - high, `3` - veryhigh *(defaults to `3`)*
319
+ * `:method` — Comparison Metric: `mpe` - Mean pixel error, `ssim` - Structural similarity, `ms-ssim` - Multi-scale structural similarity (slow!), `smallfry` - Linear-weighted BBCQ-like (may be patented) *(defaults to ssim)*
319
320
 
320
321
  ### jpegtran:
321
322
  * `:copy_chunks` — Copy all chunks *(defaults to `false`)*
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'image_optim'
5
- s.version = '0.27.1'
5
+ s.version = '0.28.0'
6
6
  s.summary = %q{Command line tool and ruby interface to optimize (lossless compress, optionally lossy) jpeg, png, gif and svg images using external utilities (advpng, gifsicle, jhead, jpeg-recompress, jpegoptim, jpegrescan, jpegtran, optipng, pngcrush, pngout, pngquant, svgo)}
7
7
  s.homepage = "https://github.com/toy/#{s.name}"
8
8
  s.authors = ['Ivan Kuchin']
@@ -33,7 +33,7 @@ EOF
33
33
 
34
34
  s.add_development_dependency 'image_optim_pack', '~> 0.2', '>= 0.2.2'
35
35
  s.add_development_dependency 'rspec', '~> 3.0'
36
- if RUBY_VERSION >= '2.2' && !Gem.win_platform? && !defined?(JRUBY_VERSION)
37
- s.add_development_dependency 'rubocop', '~> 0.59', '!= 0.78.0'
36
+ if RUBY_VERSION >= '2.4' && !Gem.win_platform? && !defined?(JRUBY_VERSION)
37
+ s.add_development_dependency 'rubocop', '~> 1.0'
38
38
  end
39
39
  end
@@ -14,6 +14,7 @@ class ImageOptim
14
14
  # Holds bin name and path, gets version
15
15
  class Bin
16
16
  class UnknownVersion < Error; end
17
+
17
18
  class BadVersion < Error; end
18
19
 
19
20
  attr_reader :name, :path, :version
@@ -197,10 +197,10 @@ class ImageOptim
197
197
  when /darwin9/
198
198
  Cmd.capture 'hwprefs cpu_count'
199
199
  when /darwin/
200
- if (Cmd.capture 'which hwprefs') != ''
201
- Cmd.capture 'hwprefs thread_count'
202
- else
200
+ if (Cmd.capture 'which hwprefs') == ''
203
201
  Cmd.capture 'sysctl -n hw.ncpu'
202
+ else
203
+ Cmd.capture 'hwprefs thread_count'
204
204
  end
205
205
  when /linux/
206
206
  Cmd.capture 'grep -c processor /proc/cpuinfo'
@@ -202,6 +202,8 @@ ImageOptim::Runner::OptionParser::DEFINE = proc do |op, options|
202
202
  [Integer, 'N']
203
203
  when Array >= type
204
204
  [Array, 'a,b,c']
205
+ when String >= type
206
+ [String, 'S']
205
207
  when ImageOptim::NonNegativeIntegerRange == type
206
208
  [type, 'M-N']
207
209
  else
@@ -11,14 +11,16 @@ class ImageOptim
11
11
  option(:allow_lossy, false, 'Allow limiting maximum quality'){ |v| !!v }
12
12
 
13
13
  STRIP_OPTION =
14
- option(:strip, :all, Array, 'List of extra markers to strip: '\
15
- '`:comments`, '\
14
+ option(:strip, :all, Array, 'List of markers to strip: '\
15
+ '`:com`, '\
16
16
  '`:exif`, '\
17
17
  '`:iptc`, '\
18
- '`:icc` or '\
18
+ '`:icc`, '\
19
+ '`:xmp`, '\
20
+ '`:none` or '\
19
21
  '`:all`') do |v|
20
22
  values = Array(v).map(&:to_s)
21
- known_values = %w[all comments exif iptc icc]
23
+ known_values = %w[com exif iptc icc xmp none all]
22
24
  unknown_values = values - known_values
23
25
  unless unknown_values.empty?
24
26
  warn "Unknown markers for jpegoptim: #{unknown_values.join(', ')}"
@@ -26,6 +26,20 @@ class ImageOptim
26
26
  OptionHelpers.limit_with_range(v.to_i, 0...QUALITY_NAMES.length)
27
27
  end
28
28
 
29
+ METHOD_OPTION =
30
+ option(:method, 'ssim', 'Comparison Metric: '\
31
+ '`mpe` - Mean pixel error, '\
32
+ '`ssim` - Structural similarity, '\
33
+ '`ms-ssim` - Multi-scale structural similarity (slow!), '\
34
+ '`smallfry` - Linear-weighted BBCQ-like (may be patented)') do |v, opt_def|
35
+ if %w[mpe ssim ms-ssim smallfry].include? v
36
+ v
37
+ else
38
+ warn "Unknown method for jpegrecompress: #{v}"
39
+ opt_def.default
40
+ end
41
+ end
42
+
29
43
  def used_bins
30
44
  [:'jpeg-recompress']
31
45
  end
@@ -38,6 +52,7 @@ class ImageOptim
38
52
  def optimize(src, dst)
39
53
  args = %W[
40
54
  --quality #{QUALITY_NAMES[quality]}
55
+ --method #{method}
41
56
  --no-copy
42
57
  #{src}
43
58
  #{dst}
@@ -55,6 +55,7 @@ class ImageOptim
55
55
  --quality=#{quality.begin}-#{quality.end}
56
56
  --speed=#{speed}
57
57
  --output=#{dst}
58
+ --skip-if-larger
58
59
  --force
59
60
  #{max_colors}
60
61
  --
@@ -18,7 +18,7 @@ def write_worker_options(io, klass)
18
18
  klass.option_definitions.each do |option_definition|
19
19
  line = "* `:#{option_definition.name}` — #{option_definition.description}"
20
20
  unless line['(defaults']
21
- line << " *(defaults to #{option_definition.default_description})*"
21
+ line += " *(defaults to #{option_definition.default_description})*"
22
22
  end
23
23
  io.puts line
24
24
  end
@@ -102,7 +102,7 @@ describe ImageOptim::Cache do
102
102
  expect(FileUtils).not_to receive(:mv)
103
103
  expect(File).not_to receive(:rename)
104
104
 
105
- expect(cache.fetch(original){}).to eq(cached)
105
+ expect(cache.fetch(original){ nil }).to eq(cached)
106
106
  end
107
107
 
108
108
  it 'returns nil when file is already optimized' do
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'image_optim/worker/jpegrecompress'
5
+
6
+ describe ImageOptim::Worker::Jpegrecompress do
7
+ describe 'method value' do
8
+ let(:subject){ described_class.new(ImageOptim.new, method).method }
9
+
10
+ context 'default' do
11
+ let(:method){ {} }
12
+
13
+ it{ is_expected.to eq('ssim') }
14
+ end
15
+
16
+ context 'uses default when invalid' do
17
+ let(:method){ {:method => 'invalid'} }
18
+
19
+ it 'warns and keeps default' do
20
+ expect_any_instance_of(described_class).
21
+ to receive(:warn).with('Unknown method for jpegrecompress: invalid')
22
+ is_expected.to eq('ssim')
23
+ end
24
+ end
25
+
26
+ context 'can use a valid option' do
27
+ let(:method){ {:method => 'smallfry'} }
28
+
29
+ it{ is_expected.to eq('smallfry') }
30
+ end
31
+ end
32
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: image_optim
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.27.1
4
+ version: 0.28.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Kuchin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-29 00:00:00.000000000 Z
11
+ date: 2020-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fspath
@@ -138,20 +138,14 @@ dependencies:
138
138
  requirements:
139
139
  - - "~>"
140
140
  - !ruby/object:Gem::Version
141
- version: '0.59'
142
- - - "!="
143
- - !ruby/object:Gem::Version
144
- version: 0.78.0
141
+ version: '1.0'
145
142
  type: :development
146
143
  prerelease: false
147
144
  version_requirements: !ruby/object:Gem::Requirement
148
145
  requirements:
149
146
  - - "~>"
150
147
  - !ruby/object:Gem::Version
151
- version: '0.59'
152
- - - "!="
153
- - !ruby/object:Gem::Version
154
- version: 0.78.0
148
+ version: '1.0'
155
149
  description:
156
150
  email:
157
151
  executables:
@@ -230,6 +224,7 @@ files:
230
224
  - spec/image_optim/runner/glob_helpers_spec.rb
231
225
  - spec/image_optim/runner/option_parser_spec.rb
232
226
  - spec/image_optim/space_spec.rb
227
+ - spec/image_optim/worker/jpegrecompress_spec.rb
233
228
  - spec/image_optim/worker/optipng_spec.rb
234
229
  - spec/image_optim/worker/pngquant_spec.rb
235
230
  - spec/image_optim/worker_spec.rb
@@ -269,7 +264,7 @@ licenses:
269
264
  metadata:
270
265
  bug_tracker_uri: https://github.com/toy/image_optim/issues
271
266
  changelog_uri: https://github.com/toy/image_optim/blob/master/CHANGELOG.markdown
272
- documentation_uri: https://www.rubydoc.info/gems/image_optim/0.27.1
267
+ documentation_uri: https://www.rubydoc.info/gems/image_optim/0.28.0
273
268
  source_code_uri: https://github.com/toy/image_optim
274
269
  post_install_message: |
275
270
  Rails image assets optimization is extracted into image_optim_rails gem
@@ -288,7 +283,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
288
283
  - !ruby/object:Gem::Version
289
284
  version: '0'
290
285
  requirements: []
291
- rubygems_version: 3.1.4
286
+ rubygems_version: 3.1.5
292
287
  signing_key:
293
288
  specification_version: 4
294
289
  summary: Command line tool and ruby interface to optimize (lossless compress, optionally
@@ -313,6 +308,7 @@ test_files:
313
308
  - spec/image_optim/runner/glob_helpers_spec.rb
314
309
  - spec/image_optim/runner/option_parser_spec.rb
315
310
  - spec/image_optim/space_spec.rb
311
+ - spec/image_optim/worker/jpegrecompress_spec.rb
316
312
  - spec/image_optim/worker/optipng_spec.rb
317
313
  - spec/image_optim/worker/pngquant_spec.rb
318
314
  - spec/image_optim/worker_spec.rb