2013-03-13 34 views
0

我正在使用Carrierwave和RMagick將圖像上傳到我的Rails應用程序。我有一個image_uploader這樣的:如何使用carrierwave,resize_and_pad方法和jpg放置透明背景?

class ImageUploader < CarrierWave::Uploader::Base 

    # ... Other stuff ... 
    process :convert => 'png' 

    def filename 
    super.chomp(File.extname(super)) + '.png' 
    end 

    # ... 

    version :resized_image do 
    process :resize_and_pad => [X, Y] 
    end 

    # ... 
end 

我的問題是,當我上傳一個PNG圖像,所述resize_and_pad方法是添加一個透明背景,以適應指定的尺寸。但是,當我上傳一個jpg圖像時,它將被轉換爲png,但背景是白色的並且不透明,可能是因爲圖像在調整大小之後而不是之前轉換爲png。

那麼,有沒有解決這個問題的方法?是否有任何可能的方法來確保convert方法在resize_and_pad之前調用以將透明背景添加到調整大小的圖像?

編輯

我把一個例子,讓我更清楚的問題:

上傳的JPG是一個正常的圖像,例如300像素×300像素。我的resize_and_pad方法將圖像填充到300px×400px。那些我想要打印的100像素必須是透明的,但由於JPG不能具有透明背景,因此在應用resize_and_pad之前,我嘗試將其轉換爲PNG。我的問題是,最終的結果是一個帶有白色背景而不是透明背景的圖像。

+0

看到http://stackoverflow.com/questions/19625066/carrierwave-rmagick-not-removing-transparency-in-convert-to-jpg – 2014-12-10 10:34:52

回答

0

JPG文件不支持透明度,如果您在JPEG圖像中看到白色背景,那是因爲它充滿了白色,因此當您的上傳程序處理JPEG圖像時,它會忠實地轉換白色背景。

+0

我知道,這就是爲什麼我試圖將圖像轉換爲PNG在調整大小過程之前。此外,這一事實正在文檔中指定:http://www.ruby-doc.org/gems/docs/c/carrierwave-rails3-0.4.5/CarrierWave/RMagick.html#method-i-resize_and_pad。但它不回答我的問題。 – Pigueiras 2013-03-13 16:57:00

+0

那麼,你正試圖實現Resize在轉換過程中將白色背景轉換爲透明嗎? – 2013-03-13 21:56:58

+0

我在這個問題上舉了一個例子。也許你可以更好地理解我的問題。 – Pigueiras 2013-03-13 22:52:35