【问题标题】:How to put a transparent background with carrierwave, resize_and_pad method and jpg?如何使用carrierwave,resize_and_pad方法和jpg放置透明背景?
【发布时间】:2013-04-14 02:24:20
【问题描述】:

我正在使用 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。

那么,有什么办法可以解决这个问题吗?是否有任何可能的方法来确保在 resize_and_pad 之前调用 convert 方法以将透明背景添加到调整大小的图像?

编辑

我举个例子让我的问题更清楚:

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

【问题讨论】:

标签: ruby-on-rails carrierwave rmagick


【解决方案1】:

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

【讨论】:

  • 我知道,这就是我尝试在调整大小过程之前将图像转换为 png 的原因。文档中也指定了这一事实:ruby-doc.org/gems/docs/c/carrierwave-rails3-0.4.5/CarrierWave/…。但它没有回答我的问题。
  • 那么,在转换过程中,您想要通过 Resize 将白色背景转换为透明的效果吗?
  • 我在问题中举了一个例子。也许你能更好地理解我的问题。
猜你喜欢
  • 1970-01-01
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
  • 2021-04-27
相关资源
最近更新 更多