2012-12-16 66 views
2

我使用CarrierWave生成版本(縮略圖具有不同的大小),並且在每個版本上添加水印。如何僅使用CarrierWave處理原始圖像文件?

我目前設法爲每個縮略圖應用水印,但我想將它添加到原始圖像上。

這裏是我的嘗試:

def watermark 
    manipulate! do |img| 
    watermark = Magick::Image.read(Rails.root.join('app/assets/images/watermark_512.png')).first 
    img   = img.composite(watermark, Magick::CenterGravity, Magick::OverCompositeOp) 
    end 
end 

version :original do 
    process :watermark 
end 

version :thumb_512 do 
    process :resize_to_fit => [512, 512] 
    process :watermark 
end 

version :thumb_256 do 
    process :resize_to_fit => [256, 256] 
    process :watermark 
end 

但是,這是行不通的。然而,我試圖簡單地添加

process :watermark 

以外的任何「版本」塊,但它所做的只是在縮略圖上添加兩次水印。

回答

2

您可以使用CarrierWave在你上傳類提供store回調,這樣

class SomeUploader < CarrierWave::Uploader::Base 
    # Your code ... 

    before :store, :watermark_method 

    def watermark_method(*args) 
    # watermark it! 
    end 
end 
+0

這實際上是工作!但是有一個小錯誤。您需要將方法的名稱作爲符號傳遞給「之前」,而不是方法本身。也許你可以編輯它:)謝謝你! –

+0

你是對的,感謝你的注意,我直接在SO中編寫代碼,猜測我很着急:)。 –

相關問題