tom
December 8, 2005, 7:03am
1
Here’s some code to take an image and create one that has a maximum
dimension of 100 pixels:
img_big = Magick::Image.from_blob(file_field.read).first
img_smaller = img_big.change_geometry("100x100") { |cols, rows, img|
img.resize(cols, rows)
}
thumbnail_column_data = img_smaller.to_blob { self.quality = 75 }
Remember to always follow up the RMagick calls with:
fDisabled = GC.enable
GC.start
GC.disable if fDisabled
Otherwise Ruby will soon run out of memory.
tom
December 8, 2005, 6:09pm
2
I am trying to add a thumbnail to the image upload example in the “Agile
Web D. with Rails” book.
I added a blob column “thumbnail” to the table.
Added “require ‘RMagick’” to the bottom of environment.rb
My model looks like:
class Picture < ActiveRecord::Base
belongs_to :picture_category
validates_format_of :content_type, :with => /^image/,
:message => “— you can only upload pictures”
def picture=(picture_field)
self.name = base_part_of(picture_field.original_filename)
self.content_type = picture_field.content_type.chomp
self.data = picture_field.read
img_big = Magick::Image.from_blob(self.data)
img_smaller = img_big.change_geometry("100x100") { |cols, rows, img|
img.resize(cols, rows)
}
self.thumbnail = img_smaller.to_blob { self.quality = 75 }
end
def base_part_of(file_name)
name = File.basename(file_name)
name.gsub(/[^\w._-]/, ‘’)
end
end
The error I am getting is:
undefined method `change_geometry’ for [ JPEG 1024x768 DirectClass 8-bit
201kb]:Array
I am sure there are probably mutiple mistakes. What am I doing wrong
(besides error recovery and validation, one step at a time)?
tom
December 8, 2005, 6:33pm
3
Try this code
img = Magick::Image.from_blob(self.content_data).first
img.change_geometry!('140x200') { |cols, rows, i|
i.resize!(cols, rows)
}
self.thumbnail = img.to_blob
GC.start