@@ -31,9 +31,10 @@ class AssetUploader < Shrine
3131 versions = { original : io . download }
3232
3333 if image? ( io )
34+ image_optim = image_optim_for ( context [ :config ] [ :metadata ] [ :image_optim_config ] )
3435 versions . merge! ( context [ :config ] [ :metadata ] [ :versions ] . transform_values do |version |
3536 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
3738 end )
3839 end
3940
@@ -54,9 +55,26 @@ def image?(io)
5455 MimeMagic . new ( io . data [ 'metadata' ] [ 'mime_type' ] ) . mediatype == 'image'
5556 end
5657
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
6062 pathname ? pathname . open : image
6163 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
6280end
0 commit comments