require 'RMagick'
class Image < Upload
after_create :create_thumbnail
def initialize(params)
super
@file.rewind
@image = Magick::Image.from_blob(@file.read).first
end
def create_thumbnail
dimension = post.parent_id ? 175 : 250
@image.change_geometry("#{dimension}x#{dimension}") { |cols, rows, image|
if image.columns > dimension or image.rows > dimension then image.resize!(cols, rows, Magick::BoxFilter) end }
FileUtils.mkdir_p(File.dirname(thumbnail_path)) unless File.exist?(File.dirname(thumbnail_path))
@image.write(thumbnail_path)
end
def delete_files
super
File.delete(thumbnail_path) rescue nil
end
def get_file_info
super
self[:width] = @image.columns
self[:height] = @image.rows
end
def thumbnail_path
return "#{RAILS_ROOT}/public/uploads/thumbnails/#{self[:server_filename]}"
end
def validate_on_create
if @image.columns > 10000 or @image.rows > 10000 then errors.add_to_base('The dimensions of this image are too large.') end
end
end