微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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’).好极了.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐