tdp*_*110 6 file-upload ruby-on-rails carrierwave
我想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
Run Code Online (Sandbox Code Playgroud)
因此,无论我传入的图像格式类型如何,都会生成两个文件:一个命名jpg.jpg,一个命名png.png.jpg.jpg确实总是一个JPEG文件(用Unix的file命令验证),BUT png.png只是一个真正的PNG格式文件,当且仅当我最初传入一个png格式的文件时(传入一个jpeg导致一个jpeg格式的文件)!
想法?
这可能没什么用,但我发现这个convert方法Carrierwave本身就是可疑的: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上
谢谢!
所以我不确定为什么会这样,但事实证明问题出在# more processors我隐藏的png版本的部分.从版本中省略它们会导致任何输入类型的正版PNG文件.这些处理器调用manipulate!并执行一些操作.相反,修复是调用manipulate!(:format => 'png').好极了.
| 归档时间: |
|
| 查看次数: |
4796 次 |
| 最近记录: |