我正在使用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。我的问题是最终结果是带有白色背景而不是透明背景的图像。
答案 0 :(得分:0)
JPG文件不支持透明度,如果您在JPEG图像中看到白色背景,那是因为它填充了白色,因此当您的上传程序处理JPEG图像时,它会忠实地转换白色背景。