Een polaroid in Filecolumn met Magick (Ruby on Rails)
Voor een schoolopdracht (photoviewer) heb ik rails als backend gebruikt en omdat ik die mooie polaroid achtige afbeeldingen wilde hebben ben ik op zoek gegaan naar een oplossing in rails. Ik wist dat het mogelijk was met Rmagick, maar ik maakte ook al gebruik van FileColumn. Tijd om die twee te combineren.
Filecolumn had al de mogelijkheid om imagemagick aan te roepen door middel van dit soort code:
class Entry < ActiveRecord::Base
file_column :image, :magick => {
:versions => { "thumb" => "50x50", "medium" => "640x480>"}
}
end
Maar dit is niet genoeg, ik wil polaroids.
Op de site van rmagick staat een voorbeeld hoe je polaroids kunt maken in Rails. Dit voorbeeld heb ik gecombineerd met Filecolumn en hieronder staat het resultaat:
class Image < ActiveRecord::Base
rnd = rand(10) - 5
file_column :url, :magick => {
:versions => {
"polaroid_thumb" => {
:transformation => Proc.new { |image|
image.border!(18, 18, "#f0f0ff")
# Bend the image
image.background_color = "#2c2b2b"
amplitude = image.columns * 0.01
wavelength = image.rows * 2
image.rotate!(90)
image = image.wave(amplitude, wavelength)
image.rotate!(-90)
# Make the shadow
shadow = image.flop
shadow = shadow.colorize(1, 1, 1, "black")
shadow.background_color = "#2c2b2b"
shadow.border!(10, 10, "#2c2b2b")
shadow = shadow.blur_image(0, 3)
# Composite image over shadow.
# The y-axis adjustment can vary according to taste.
image = shadow.composite(
image, -amplitude/2, 5, Magick::OverCompositeOp)
image.rotate!(- rnd)
image.change_geometry!('800x600>') {
|cols, rows, img| img.resize!(cols, rows)
}
}
},
}
}
end
De rnd zorgt ervoor dat elke foto net iets anders geroteerd wordt. Hierdoor ziet het geheel er iets speelser uit.
![]()
Het belangrijkste uit het bovenstaande stuk code is de volgende regel:
:transformation => Proc.new { |image|
Na die regel kun je alle “normale” image magick codes gebruiken.
De magick code kun je nalezen op de Rmagick site, daar wordt ook uitgelegd wat het precies doet.
Een voorbeeld is te vinden op: Kairou.matsimitsu.nl


No comments
comments rss [?] | trackback uri [?]Submit your comment
XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>