1

我正在使用 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. 我的问题是最终结果是具有白色背景而不是透明背景的图像。

4

1 回答 1

-1

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

于 2013-03-13T14:58:12.437 回答