class Hydra::Derivatives::Processors::Image

Public Instance Methods

process() click to toggle source
# File lib/hydra/derivatives/processors/image.rb, line 7
def process
  timeout ? process_with_timeout : create_resized_image
end
process_with_timeout() click to toggle source
# File lib/hydra/derivatives/processors/image.rb, line 11
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 Instance Methods

create_image() { |xfrm| ... } click to toggle source
# File lib/hydra/derivatives/processors/image.rb, line 30
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
create_resized_image() click to toggle source

When resizing images, it is necessary to flatten any layers, otherwise the background may be completely black. This happens especially with PDFs. See #110

# File lib/hydra/derivatives/processors/image.rb, line 21
def create_resized_image
  create_image do |xfrm|
    if size
      xfrm.flatten
      xfrm.resize(size)
    end
  end
end
load_image_transformer() click to toggle source

Override this method if you want a different transformer, or need to load the raw image from a different source (e.g. external file)

# File lib/hydra/derivatives/processors/image.rb, line 47
def load_image_transformer
  MiniMagick::Image.open(source_path)
end
write_image(xfrm) click to toggle source
# File lib/hydra/derivatives/processors/image.rb, line 38
def write_image(xfrm)
  output_io = StringIO.new
  xfrm.write(output_io)
  output_io.rewind
  output_file_service.call(output_io, directives)
end

Private Instance Methods

quality() click to toggle source
# File lib/hydra/derivatives/processors/image.rb, line 57
def quality
  directives.fetch(:quality, nil)
end
selected_layers(image) click to toggle source
# File lib/hydra/derivatives/processors/image.rb, line 61
def selected_layers(image)
  if image.type =~ /pdf/i
    image.layers[directives.fetch(:layer, 0)]
  elsif directives.fetch(:layer, false)
    image.layers[directives.fetch(:layer)]
  else
    image
  end
end
size() click to toggle source
# File lib/hydra/derivatives/processors/image.rb, line 53
def size
  directives.fetch(:size, nil)
end