derived_images 0.3.2 → 0.4.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: 1d5a7a0212b48a6d0f1abddb10b928a72d447485a6199ed37785fd4983ebf2f5
4
- data.tar.gz: 7027ba8cee4dd84145de31557763138c209ccdf6fe446a32e041fffb1aa4c6c0
3
+ metadata.gz: baf29fb4eb242552ac2986bdc0edafcbcea4e002d392c9c496d3de8722cbf31b
4
+ data.tar.gz: 2bc1784b75cad336ef7e878b2ab885f5f0df3edb278296757d644cf6d80ffa8a
5
5
  SHA512:
6
- metadata.gz: bebf02ecc4da6e61535f6e0b2fb07ea0549cd1e510973c57d0c2e6df72739cd759620c31a2f5be2a10fe941f51db384db0a7fb054f41d0a989621e2495a1ab72
7
- data.tar.gz: 5643b01fe003a19e2e3963d93d85b125aa22fcb5740c70676b55f58f253600104c10797adf3b8657f26146fe56778addd209242693c118016a90958df3bbeda8
6
+ metadata.gz: a876902f03b4331d000aab0bb8e3d608e57b17edc40f68a920ec88aa452aa7dbce5e221496e03bc4e5723e6e57cdffa465adf457c832a5287c2b7d4dccfc8075
7
+ data.tar.gz: 9a24bb5f27aac0519af396408b3d6256e1c66afa708a125881cad8018b3f86f034b1974eb24c0ed132c617c66b0d09b11f3901b620341ace4be44aa8404f0359
@@ -73,7 +73,7 @@ module DerivedImages
73
73
  def each
74
74
  return enum_for(:each) unless block_given?
75
75
 
76
- path.glob('*/*') { |path| yield path.to_s.last(65).delete('/') }
76
+ path.glob('*/*') { |path| yield path.to_s.last(65).delete('/') } if enabled?
77
77
  self
78
78
  end
79
79
 
@@ -8,10 +8,7 @@ module DerivedImages
8
8
  def initialize(source, target)
9
9
  @source = source
10
10
  @target = target
11
- target_ext = File.extname(target)
12
- pipeline = PROCESSORS.fetch(DerivedImages.config.processor).dup
13
- pipeline = pipeline.convert(target_ext) if target_ext.present?
14
- @pipeline = pipeline
11
+ @pipeline = default_pipeline(File.extname(target).delete_prefix('.'))
15
12
  end
16
13
 
17
14
  def ==(other)
@@ -37,7 +34,9 @@ module DerivedImages
37
34
  def cache_key
38
35
  return nil unless source_present?
39
36
 
40
- Digest::SHA256.hexdigest({ source: source_digest, pipeline: options_hash }.to_json)
37
+ Digest::SHA256.hexdigest({ version: DerivedImages::VERSION,
38
+ source: source_digest,
39
+ pipeline: options_hash }.to_json)
41
40
  end
42
41
 
43
42
  def self.empty_pipeline
@@ -45,6 +44,7 @@ module DerivedImages
45
44
  end
46
45
 
47
46
  PROCESSORS = { mini_magick: ImageProcessing::MiniMagick, vips: ImageProcessing::Vips }.freeze
47
+ COMPRESSION_OVERRIDES = { 'avif' => 'av1', 'heic' => 'hevc' }.freeze
48
48
 
49
49
  def target_digest
50
50
  Digest::SHA256.file(target_path).hexdigest
@@ -60,6 +60,17 @@ module DerivedImages
60
60
  Digest::SHA256.file(source_path).hexdigest
61
61
  end
62
62
 
63
+ def default_pipeline(target_ext)
64
+ pipeline = PROCESSORS.fetch(DerivedImages.config.processor).dup
65
+ pipeline = pipeline.convert(target_ext) if target_ext.present?
66
+ vips = pipeline.options[:processor] == ImageProcessing::Vips::Processor
67
+ if vips && !Vips.at_least_libvips?(8, 12) && COMPRESSION_OVERRIDES.key?(target_ext)
68
+ # https://github.com/libvips/libvips/commit/47383b5bfc136f7870c319a1edce4848e177425b
69
+ pipeline = pipeline.saver(compression: COMPRESSION_OVERRIDES.fetch(target_ext))
70
+ end
71
+ pipeline
72
+ end
73
+
63
74
  protected
64
75
 
65
76
  def options_hash
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DerivedImages
4
- VERSION = '0.3.2'
4
+ VERSION = '0.4.0'
5
5
  end
@@ -45,11 +45,13 @@ module DerivedImages
45
45
  end
46
46
 
47
47
  def generate(entry, cache_key)
48
+ target_path = entry.target_path
48
49
  time = Benchmark.realtime do
49
50
  tempfile = entry.pipeline.loader(fail: true).call(entry.source_path.to_s)
50
- FileUtils.mv(tempfile.path, entry.target_path)
51
+ File.chmod(0o644, tempfile.path)
52
+ FileUtils.mv(tempfile.path, target_path)
51
53
  end
52
- cache.store(cache_key, entry.target_path)
54
+ cache.store(cache_key, target_path)
53
55
  DerivedImages.config.logger.info("Created #{entry.target} from #{entry.source} in #{time.round(3)}s")
54
56
  end
55
57
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: derived_images
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Kitson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-26 00:00:00.000000000 Z
11
+ date: 2023-05-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: image_processing