Rails Paperclip处理CMYK图像。如何检测当前的色彩空间

时间:2015-09-14 22:57:48

标签: ruby-on-rails-4 image-processing paperclip

我正在使用Paperclip来处理项目中的所有文件上传。我的问题是一些文件是图像,一些图像使用CMYK作为颜色空间,这在某些浏览器中是个问题,但特别是在某些Android版本上(例如Android 4.2无法处理带有CMYK颜色空间的jpgs)

我通过在回形针中使用convert_options并删除CMYK并添加RGB来解决这个问题。我的代码看起来像这样:

has_attached_file :media,
                  :storage => :azure,
                  :styles => lambda { |a|
                      if a.instance.is_image?
                        {
                            :thumb => {geometry: "75x75#", convert_options: '-strip -colorspace RGB' },
                            :preview => {geometry: "300x300#",convert_options: '-strip -colorspace RGB' },
                            :original => {convert_options: '-strip -colorspace RGB'}

                        }
                      else ....

工作正常,但是当运行convert_options时,颜色会发生变化。所以,我只想在检测到当前颜色空间是CMYK时运行convert_options,如果它已经是RGB则不运行它,它对已经是RGB的图像没有任何作用,只是改变原始颜色。 我正在寻找类似的东西:

    has_attached_file :media,
                      :storage => :azure,
                      :styles => lambda { |a|
                        if a.instance.is_image?
                          if a.instance.colorspace_is?("CMYK")
                                {
                                    :thumb => {geometry: "75x75#", convert_options: '-strip -colorspace RGB' },
                                    :preview => {geometry: "300x300#",convert_options: '-strip -colorspace RGB' },
                                    :original => {convert_options: '-strip -colorspace RGB'}
                          else
                                {
                                    :thumb => "75x75#",
                                    :preview => "300x300#"}

                                }
                          end
                         else ....

这可能吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案!

在lib / paperclip中,我在

中添加了带有此代码的colorspace.rb
<button type="button" class="btn btn-circle btn-default">4</button>

在我的模型中,我将处理器设置为色彩空间而不是缩略图。效果很好