2019-05-02 18:17:27 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2013-02-05 14:16:51 -05:00
|
|
|
module ImageSizer
|
|
|
|
# Resize an image to the aspect ratio we want
|
2018-12-03 10:19:49 -05:00
|
|
|
def self.resize(width, height, opts = {})
|
2013-06-15 06:29:20 -04:00
|
|
|
return if width.blank? || height.blank?
|
2013-02-25 11:42:20 -05:00
|
|
|
|
2015-07-15 11:15:43 -04:00
|
|
|
max_width = (opts[:max_width] || SiteSetting.max_image_width).to_f
|
|
|
|
max_height = (opts[:max_height] || SiteSetting.max_image_height).to_f
|
2013-08-25 18:24:24 -04:00
|
|
|
|
2013-02-05 14:16:51 -05:00
|
|
|
w = width.to_f
|
|
|
|
h = height.to_f
|
|
|
|
|
2013-08-25 18:24:24 -04:00
|
|
|
return w.floor, h.floor if w <= max_width && h <= max_height
|
2013-02-05 14:16:51 -05:00
|
|
|
|
2015-07-15 11:15:43 -04:00
|
|
|
ratio = [max_width / w, max_height / h].min
|
2013-08-25 18:24:24 -04:00
|
|
|
[(w * ratio).floor, (h * ratio).floor]
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
|
2016-05-23 10:18:30 -04:00
|
|
|
def self.crop(width, height, opts = {})
|
|
|
|
return if width.blank? || height.blank?
|
|
|
|
|
|
|
|
max_width = (opts[:max_width] || SiteSetting.max_image_width).to_f
|
|
|
|
max_height = (opts[:max_height] || SiteSetting.max_image_height).to_f
|
|
|
|
|
|
|
|
w = width.to_f
|
|
|
|
h = height.to_f
|
|
|
|
|
|
|
|
return w.floor, h.floor if w <= max_width && h <= max_height
|
|
|
|
|
|
|
|
ratio = max_width / w
|
2016-07-27 12:48:02 -04:00
|
|
|
|
|
|
|
[[max_width, w].min.floor, [max_height, (h * ratio)].min.floor]
|
2016-05-23 10:18:30 -04:00
|
|
|
end
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|