@@ -31,9 +31,10 @@ class AssetUploader < Shrine
31
31
versions = { original : io . download }
32
32
33
33
if image? ( io )
34
+ image_optim = image_optim_for ( context [ :config ] [ :metadata ] [ :image_optim_config ] )
34
35
versions . merge! ( context [ :config ] [ :metadata ] [ :versions ] . transform_values do |version |
35
36
processed_version = send ( "#{ version [ :process ] [ :method ] } !" , io . download , *version [ :process ] [ :config ] . values )
36
- optimize_image! ( processed_version )
37
+ optimize_image! ( processed_version , image_optim ) # TODO: per-version image_optim_config
37
38
end )
38
39
end
39
40
@@ -54,9 +55,26 @@ def image?(io)
54
55
MimeMagic . new ( io . data [ 'metadata' ] [ 'mime_type' ] ) . mediatype == 'image'
55
56
end
56
57
57
- def optimize_image! ( image )
58
- image_optim = ImageOptim . new ( pngout : false , svgo : false , allow_lossy : true ) # TODO: implement per-Field/version image_optim configuration
59
- pathname = image_optim . optimize_image! ( image )
58
+ private
59
+
60
+ def optimize_image! ( image , image_optim )
61
+ pathname = image_optim . optimize_image! ( image ) # TODO: move to ActiveJob
60
62
pathname ? pathname . open : image
61
63
end
64
+
65
+ def image_optim_for ( image_optim_config )
66
+ ImageOptim . new ( process_image_optim_config ( image_optim_config ) )
67
+ end
68
+
69
+ def process_image_optim_config ( image_optim_config )
70
+ processed_image_optim_config = image_optim_config . merge ( pngout : false , svgo : false , verbose : true , skip_missing_workers : false )
71
+ processed_image_optim_config . extend ( Hashie ::Extensions ::DeepLocate )
72
+ quality_range_hashes = processed_image_optim_config . deep_locate -> ( key , value , object ) { key == :quality_range }
73
+ quality_range_hashes . each do |quality_range_hash |
74
+ quality_range_hash [ :quality ] = quality_range_hash [ :quality_range ] [ :begin ] ..quality_range_hash [ :quality_range ] [ :end ]
75
+ quality_range_hash . delete ( :quality_range )
76
+ end
77
+
78
+ processed_image_optim_config
79
+ end
62
80
end
0 commit comments