This code works for watermarking images with file_column, however it
currently watermarks the original and not the other versions (though for
obvious reasons I dont want it on the small sizes). How can I apply this
watermark code to other versions of my file_column entries.
Also it should be noted that the watermark_image function is not mine, I
found it on a message board but have since lost the link. Big thanks to
whomever wrote it originally.
Thanks for your help.
Here is my entire Avatar model, theres no sense in trying to keep this a
secret or anything as Im sure there are many people that want or could
use this code.
class Avatar < ActiveRecord::Base
#
# Associations
#
belongs_to :profile
#
# File Column
#
file_column :image,
:permission => "0664",
:magick => {
:versions => {
:full => { :size => ''400x300>''},
:square => { :crop => ''1:1'', :size =>
''90x90!'' },
:icon => { :crop => ''1:1'', :size =>
''60x60!'' }
}
}
#
# Before, During & After
#
before_create :watermark_image
#
# Validations
#
validates_file_format_of :image,
:in => [''jpg'', ''png'',
''gif''], :message => ''must be jpg, png or
gif''
#
# Private Methods
#
private
def watermark_image
#require ''RMagick''
dst = Magick::Image.read(self.image).first
src =
Magick::Image.read("#{RAILS_ROOT}/public/images/watermark.png").first
result = dst.composite(src, Magick::CenterGravity,
Magick::OverCompositeOp)
result.write(self.image)
end
end
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
That looks like my code. My solution for your problem is simple: Upload the
image twice :) One gets put in the public folder, another one gets put in a
private folder.
This was originally going to be in a book I was going to write, but I
don''t
have time any more.
def create
@photo = Photo.new params[:photo]
@photo.public = params[:photo][:filename]
if @photo.save
flash[:notice] = "The photo was saved!"
redirect_to :action => "list"
else
render :action=>"new"
end
end
What I do here is make the user upload the photo once into a filed called
filename. Then I use the controller to populate the public field as well.
This way the user doesn''t need to upload the photo twice. I''d
like to be
able to do this in the model but there''s not yet a 100% working
solution for
that yet. I just throw an exception if they didn''t do that :)
Upon creation, the public picture gets the watermark applied.
class Photo < ActiveRecord::Base
file_column :filename, :store_dir => "photos", :magick => {
:versions => {"medium" => "640x480>",
"large" => "1024x768" }
}
file_column :public, :magick => {
:versions => { "thumb" => "50x50",
"large" => "320x240>" }
}
validates_presence_of :filename, :description
before_create :watermark_image
private
def watermark_image
raise "Ensure that you have set the public field for the photo in
the controller. Usually you want to set @photo.public
params[''photo''][''filename'']" if
self.public == nil
require ''RMagick''
dst = Magick::Image.read(self.public).first
src =
Magick::Image.read("#{RAILS_ROOT}/config/sample.png").first
result = dst.composite(src, Magick::CenterGravity,
Magick::OverCompositeOp)
result.write(self.public)
end
end
Good luck with that!
On 11/16/06, Jonathon Marshall
<rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org>
wrote:>
>
> This code works for watermarking images with file_column, however it
> currently watermarks the original and not the other versions (though for
> obvious reasons I dont want it on the small sizes). How can I apply this
> watermark code to other versions of my file_column entries.
>
> Also it should be noted that the watermark_image function is not mine, I
> found it on a message board but have since lost the link. Big thanks to
> whomever wrote it originally.
>
> Thanks for your help.
>
> Here is my entire Avatar model, theres no sense in trying to keep this a
> secret or anything as Im sure there are many people that want or could
> use this code.
>
> class Avatar < ActiveRecord::Base
>
> #
> # Associations
> #
> belongs_to :profile
>
> #
> # File Column
> #
> file_column :image,
> :permission => "0664",
> :magick => {
> :versions => {
> :full => { :size => ''400x300>''},
> :square => { :crop => ''1:1'', :size =>
''90x90!'' },
> :icon => { :crop => ''1:1'', :size =>
''60x60!'' }
> }
> }
>
> #
> # Before, During & After
> #
> before_create :watermark_image
>
> #
> # Validations
> #
> validates_file_format_of :image,
> :in => [''jpg'', ''png'',
''gif''], :message => ''must be jpg, png or
gif''
>
> #
> # Private Methods
> #
> private
> def watermark_image
> #require ''RMagick''
> dst = Magick::Image.read(self.image).first
> src >
Magick::Image.read("#{RAILS_ROOT}/public/images/watermark.png").first
>
> result = dst.composite(src, Magick::CenterGravity,
> Magick::OverCompositeOp)
> result.write(self.image)
> end
>
> end
>
> --
> Posted via http://www.ruby-forum.com/ .
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
kaiye85-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
2006-Nov-17 04:21 UTC
Re: file_column and image watermarks
I did it by doing this
after_save :watermark_on_image
private
def watermark_image
#original photo
dst = Magick::Image.read(self.image).first
src
Magick::Image.read("#{RAILS_ROOT}/public/images/watermark.jpg").first
result = dst.composite(src, Magick::SouthEastGravity,
Magick::OverCompositeOp)
result.write(self.image)
#medium
medium
"#{RAILS_ROOT}/public/photo/image/#{self.id}/medium/#{File.basename(self.image)}"
dst = Magick::Image.read(medium).first
src
Magick::Image.read("#{RAILS_ROOT}/public/images/watermadrk.jpg").first
result = dst.composite(src, Magick::SouthEastGravity,
Magick::OverCompositeOp)
result.write(medium)
end
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---