class GallerizeCli::Image::Version
Constants
- GRAVITY_TYPES
Attributes
image[RW]
name[RW]
options[RW]
Public Class Methods
new(image, name, options)
click to toggle source
# File lib/gallerize_cli/image/version.rb, line 13 def initialize(image, name, options) @image = image @name = name @options = OpenStruct.new(options) @valid = true end
Public Instance Methods
config()
click to toggle source
# File lib/gallerize_cli/image/version.rb, line 48 def config image.config end
file_path()
click to toggle source
# File lib/gallerize_cli/image/version.rb, line 28 def file_path @file_path ||= load_file_path end
height()
click to toggle source
# File lib/gallerize_cli/image/version.rb, line 36 def height options.height.to_i end
method()
click to toggle source
# File lib/gallerize_cli/image/version.rb, line 40 def method options.method end
process()
click to toggle source
# File lib/gallerize_cli/image/version.rb, line 20 def process generate end
url()
click to toggle source
# File lib/gallerize_cli/image/version.rb, line 24 def url file_path.to_s.gsub(image.directory.output_path, config.site_url) end
valid?()
click to toggle source
# File lib/gallerize_cli/image/version.rb, line 44 def valid? !!@valid end
width()
click to toggle source
# File lib/gallerize_cli/image/version.rb, line 32 def width options.width.to_i end
Private Instance Methods
crop_offsets_by_gravity(gravity, original_dimensions, cropped_dimensions)
click to toggle source
# File lib/gallerize_cli/image/version.rb, line 102 def crop_offsets_by_gravity(gravity, original_dimensions, cropped_dimensions) raise(ArgumentError, "Gravity must be one of #{GRAVITY_TYPES.inspect}") unless GRAVITY_TYPES.include?(gravity.to_sym) raise(ArgumentError, "Original dimensions must be supplied as a [ width, height ] array") unless original_dimensions.kind_of?(Enumerable) && original_dimensions.size == 2 raise(ArgumentError, "Cropped dimensions must be supplied as a [ width, height ] array") unless cropped_dimensions.kind_of?(Enumerable) && cropped_dimensions.size == 2 original_width, original_height = original_dimensions cropped_width, cropped_height = cropped_dimensions vertical_offset = case gravity when :north_west, :north, :north_east then 0 when :center, :east, :west then [((original_height - cropped_height) / 2.0).to_i, 0].max when :south_west, :south, :south_east then (original_height - cropped_height).to_i end horizontal_offset = case gravity when :north_west, :west, :south_west then 0 when :center, :north, :south then [((original_width - cropped_width) / 2.0).to_i, 0].max when :north_east, :east, :south_east then (original_width - cropped_width).to_i end [horizontal_offset, vertical_offset] end
generate()
click to toggle source
# File lib/gallerize_cli/image/version.rb, line 54 def generate if width <= 0 || height <= 0 GallerizeCli.logger.debug "version: #{name} is missing width: #{width} or height: #{height}" elsif !File.exists?(file_path) GallerizeCli.logger.debug "generating #{options.approach} #{file_path}" # open it up # do we have width and height? new_image = resize_with_crop(MiniMagick::Image.open(image.file_path), width, height) # landscape? new_image.write file_path end rescue => err @valid = false GallerizeCli.logger.debug "#{err} image.file_name: #{image.file_name} name: #{name} options: #{options}" end
load_file_path()
click to toggle source
# File lib/gallerize_cli/image/version.rb, line 131 def load_file_path path = File.join(image.directory.images_path, name) mkdir_p(path) unless Dir.exists?(path) File.join(path, image.file_name) end
resize_with_crop(img, w, h, opts = {})
click to toggle source
# File lib/gallerize_cli/image/version.rb, line 73 def resize_with_crop(img, w, h, opts = {}) gravity = opts[:gravity] || :center w_original, h_original = [img[:width].to_f, img[:height].to_f] op_resize = '' # check proportions if w_original * h < h_original * w op_resize = "#{w.to_i}x" w_result = w h_result = (h_original * w / w_original) else op_resize = "x#{h.to_i}" w_result = (w_original * h / h_original) h_result = h end w_offset, h_offset = crop_offsets_by_gravity(gravity, [w_result, h_result], [w, h]) img.combine_options do |i| i.resize(op_resize) i.gravity(gravity) i.crop "#{w.to_i}x#{h.to_i}+#{w_offset}+#{h_offset}!" if options.crop end img end