如何使用carrierwave,resize_and_pad方法和jpg放置透明背景?

时间:2013-03-13 09:14:08

标签: ruby-on-rails carrierwave rmagick

我正在使用Carrierwave和RMagick将图像上传到我的Rails应用程序。我有一个image_uploader

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是普通图像,例如300px×300px。我的resize_and_pad方法将图像填充为300px×400px。我要填充的那些100px必须是透明的,但由于JPG不能具有透明背景,我尝试在应用resize_and_pad之前转换为PNG。我的问题是最终结果是带有白色背景而不是透明背景的图像。

1 个答案:

答案 0 :(得分:0)

JPG文件不支持透明度,如果您在JPEG图像中看到白色背景,那是因为它填充了白色,因此当您的上传程序处理JPEG图像时,它会忠实地转换白色背景。