Skip to content

Instantly share code, notes, and snippets.

@mloughran
Created February 17, 2009 16:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mloughran/65818 to your computer and use it in GitHub Desktop.
Save mloughran/65818 to your computer and use it in GitHub Desktop.
module IrregularScience
def resize_within(w, h)
r_old = width.to_f / height
r_new = w.to_f / h
w_new = r_new > r_old ? (h * r_old).to_i : w
h_new = r_new > r_old ? h : (w / r_old).to_i
self.resize(w_new, h_new) do |image|
yield image
end
end
def resize_exact(w, h)
r_old = width.to_f / height
r_new = w.to_f / h
w_crop = r_new > r_old ? width : (height * r_new).to_i
h_crop = r_new > r_old ? (width / r_new).to_i : height
trim_w = (width - w_crop) / 2
trim_h = (height - h_crop) / 2
l, r = trim_w, trim_w + w_crop
t, b = trim_h, trim_h + h_crop
self.with_crop(l, t, r, b) do |img|
img.resize(w, h) do |thumb|
yield thumb
end
end
end
def resize_to_width(w)
scale = w.to_f / width
img.resize(w, h*scale) do |image|
yield image
end
end
def resize_to_height(h)
scale = h.to_f / height
img.resize(w*scale, h) do |image|
yield image
end
end
end
ImageScience.send(:include, IrregularScience)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment