2015-09-14 6 views
0

Я использую Paperclip для обработки всех загрузок файлов в моем проекте. Моя проблема в том, что некоторые файлы являются изображениями, а некоторые изображения используют CMYK в качестве цветового пространства, и это проблема в некоторых браузерах, но особенно для некоторых версий Android (например, Android 4.2 не может обрабатывать jpg с цветовым пространством CMYK)Rails Скрепка скрепки CMYK. Как обнаружить текущее цветовое пространство

I решил, что с помощью convert_options в paperclip и удалите 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 есть изменение цвета. Итак, я хотел бы запустить convert_options только в том случае, если обнаружил, что текущее цветовое пространство является CMYK и не запускает его, если оно уже 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 .... 

Возможно ли это?

ответ

0

Я нашел решение!

В Lib/скрепка Я добавил colorspace.rb с этим кодом внутри

module Paperclip 
    class Colorspace < Thumbnail 
    def transformation_command 
     scale, crop = @current_geometry.transformation_to(@target_geometry, crop?) 
     trans = [] 
     trans << "-coalesce" if animated? 
     trans << "-auto-orient" if auto_orient 
     trans << "-resize" << %["#{scale}"] unless scale.nil? || scale.empty? 
     trans << "-crop" << %["#{crop}"] << "+repage" if crop 
     trans << '-layers "optimize"' if animated? 
     trans << "-strip -colorspace RGB" unless is_rgb? 
     trans 
    end 

    protected 
    def is_rgb? 
     colorspace = identify("-verbose %m :file | grep 'Colorspace'", :file => "#{@file.path}[0]").to_s.downcase.strip 
     colorspace && colorspace.include?("rgb") 
    rescue Cocaine::ExitStatusError => e 
     return false 
    rescue Cocaine::CommandNotFoundError => e 
     raise Paperclip::Errors::CommandNotFoundError.new("Could not run the `identify` command. Please install ImageMagick.") 
    end 

    end 
end 

и в моей модели я установить процессор COLORSPACE вместо эскиза. Отлично работает

Смежные вопросы