【发布时间】:2011-11-04 21:34:06
【问题描述】:
我希望 Carrierwave 生成几个版本的图像,一个是 png 格式,一个是 jpeg 格式,但我似乎无法让它工作。我意识到这里和其他地方都提出了几个类似的问题,但我未能找到解决方案。大致来说,这就是我所拥有的:
class MyUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
version :jpeg do
process :convert => 'jpg'
# more procesors
process :processed => :jpg
end
version :png do
process :convert => 'png'
# more processors
process :processed => :png
end
def store_path(for_file = filename)
if version_name != :png
return "#{version_name}.jpg"
else
return "#{version_name}.png"
end
end
def filename
filename = if version_name != :png
super != nil ? super.split('.').first + '.jpg' : super
else
super != nil ? super.split('.').first + '.png' : super
end
end
end
因此,无论我传入哪种图像格式,这都会生成两个文件:一个名为jpg.jpg,另一个名为png.png。 jpg.jpg 确实始终是 JPEG 文件(已通过 Unix 的 file 命令验证),但 png.png 仅当且仅当我最初传入 png 格式的文件(传入 jpeg 结果时)才是真正的 PNG 格式文件在 jpeg 格式的文件中)!
想法?
这可能没用,但我发现Carrierwave 中的convert 方法本身很可疑:convert(some_format) 调用manipulate!(:format => some_format),而后者又调用(some_image_object).write("#{some_format}:#{current_path}")。现在,如果传入的原始图像是 bla.format(格式 = jpg、png 等),current_path 的扩展名为 .format(通过 manipulate! 上的猴子补丁测试)。图像格式转换在RMagick 中的工作方式是通过调用write 并使用具有所需扩展名的参数。那么为什么上面的 jpeg 转换实际上会发生呢?如果是这样,为什么 png 转换会失败?
另外,如果有用的话,我在 Rails 3.0.9 和 Carrierwave 0.5.6 上
谢谢!
【问题讨论】:
标签: ruby-on-rails carrierwave file-upload