image_optim 0.27.1 → 0.28.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 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