Sha256: caf56392de53cf52d1f4ac320e0875e24c84c16bc02e1fddb7bc5923698f2930
Contents?: true
Size: 1.77 KB
Versions: 1
Compression:
Stored size: 1.77 KB
Contents
require 'mini_magick' module Hydra::Derivatives::Processors class Image < Processor class_attribute :timeout def process timeout ? process_with_timeout : create_resized_image end def process_with_timeout Timeout.timeout(timeout) { create_resized_image } rescue Timeout::Error raise Hydra::Derivatives::TimeoutError, "Unable to process image derivative\nThe command took longer than #{timeout} seconds to execute" end protected # When resizing images, it is necessary to flatten any layers, otherwise the background # may be completely black. This happens especially with PDFs. See #110 def create_resized_image create_image do |xfrm| if size xfrm.flatten xfrm.resize(size) end end end def create_image xfrm = selected_layers(load_image_transformer) yield(xfrm) if block_given? xfrm.format(directives.fetch(:format)) xfrm.quality(quality.to_s) if quality write_image(xfrm) end def write_image(xfrm) output_io = StringIO.new xfrm.write(output_io) output_io.rewind output_file_service.call(output_io, directives) end # Override this method if you want a different transformer, or need to load the # raw image from a different source (e.g. external file) def load_image_transformer MiniMagick::Image.open(source_path) end private def size directives.fetch(:size, nil) end def quality directives.fetch(:quality, nil) end def selected_layers(image) layer_index = directives.fetch(:layer, false) return image unless layer_index image.layers[layer_index] end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
hydra-derivatives-3.2.0 | lib/hydra/derivatives/processors/image.rb |