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 +4 -4
- data/lib/derived_images/manifest_entry.rb +16 -5
- data/lib/derived_images/version.rb +1 -1
- data/lib/derived_images/worker.rb +4 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: baf29fb4eb242552ac2986bdc0edafcbcea4e002d392c9c496d3de8722cbf31b
|
4
|
+
data.tar.gz: 2bc1784b75cad336ef7e878b2ab885f5f0df3edb278296757d644cf6d80ffa8a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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({
|
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
|
@@ -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
|
-
|
51
|
+
File.chmod(0o644, tempfile.path)
|
52
|
+
FileUtils.mv(tempfile.path, target_path)
|
51
53
|
end
|
52
|
-
cache.store(cache_key,
|
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.
|
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-
|
11
|
+
date: 2023-05-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: image_processing
|