derived_images 0.3.3 → 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: 2c8643b74c6c114c37979a7139f55eea2e6ee13925cf307fc0808784151e2b0c
4
- data.tar.gz: 3b41b5bc4754ab82afd4970992a5656dfefca77dec526fe38bb4e3cc81de0611
3
+ metadata.gz: baf29fb4eb242552ac2986bdc0edafcbcea4e002d392c9c496d3de8722cbf31b
4
+ data.tar.gz: 2bc1784b75cad336ef7e878b2ab885f5f0df3edb278296757d644cf6d80ffa8a
5
5
  SHA512:
6
- metadata.gz: 685da6a723ed7dabb55008423f8924c4484da7cdb5ab2499d0c13e5424353df9c6d41cd43c0f9332249e0d713199b2758fab6b12c0c34cca4b7dc4a1065581ac
7
- data.tar.gz: e872970ac4a591925d026c1740e932cdfb912b816f5c3dd1110fd765d814a88bb2558622d06389d51aa89c8027515bf28cbf3bc172b69a9c1dee24781538ba42
6
+ metadata.gz: a876902f03b4331d000aab0bb8e3d608e57b17edc40f68a920ec88aa452aa7dbce5e221496e03bc4e5723e6e57cdffa465adf457c832a5287c2b7d4dccfc8075
7
+ data.tar.gz: 9a24bb5f27aac0519af396408b3d6256e1c66afa708a125881cad8018b3f86f034b1974eb24c0ed132c617c66b0d09b11f3901b620341ace4be44aa8404f0359
@@ -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.3'
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.3
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