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 因此,无论我传入的图像格式类型如何,都会生成两个文件:一个名为jpg.jpg,另一个名为png.png. jpg.jpg确实总是一个JPEG文件(用Unix的文件命令验证),但是png png.png只是一个真正的PNG格式文件,当且仅当我最初传入一个png格式的文件时(传入一个jpeg导致一个jpeg格式文件)! 想法? 这可能没什么用,但我发现Carrierwave中的convert方法本身是可疑的:convert(some_format)调用操作!(:format => some_format),后者又调用(some_image_object).write(“#{some_format}:# {}的current_path“).现在,如果传入的原始图像是bla.format(格式= jpg,png等),则current_path的扩展名为.format(通过操作上的monkey-patch进行测试!).在RMagick中图像格式转换的工作方式是使用具有所需扩展名的参数调用write.那么为什么上面的jpeg转换实际发生呢?如果是这样,为什么png转换会失败? 此外,如果它有用,我在Rails 3.0.9和Carrierwave 0.5.6上 谢谢! 解决方法
所以我不确定为什么会这样,但事实证明问题出现在我隐藏的png版本的#more处理器部分.从版本中省略它们会导致任何输入类型的正版PNG文件.这些处理器调用操作!并做一些事情.相反,修复是调用操作!(:format =>’png’).好极了.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |