复制Carrierwave图像会使它们变暗吗?

时间:2014-03-28 03:53:18

标签: ruby-on-rails ruby duplicates activeadmin carrierwave

我的Event模型有很多photographs。我有一个图像上传器安装到Photographs属性,并定期上传,一切正常。

然而,当我尝试复制一个事件,为新事件重新创建一个新的照片对象时,新图像比原始图像更暗,如果我复制重复事件,它会变得更暗。

我玩过它,但没有解决方案。

我的上传代码:

class ImageUploader < CarrierWave::Uploader::Base

  include CarrierWave::RMagick
  include CarrierWave::Processing::RMagick

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  def cache_dir
    "#{Rails.root}/tmp/carrierwave"
  end

  process :colorspace => :rgb

  # Remove EXIF data
  process :strip

  # Create different versions of your uploaded files:
  version :thumb do
    process :resize_to_limit => [640, 640]
  end

  version :preview_thumb do
    process :resize_to_limit => [600, 600]
  end

  version :wine_thumb do
    process :resize_to_limit => [160, 440]
  end

  version :logo_thumb do
    process :resize_to_limit => [90, 90]
  end
end

我的重复代码(在Active Admin中):

member_action :create_duplicate_event, method: :post do
  old_event = Event.find(params[:id])
  photograph_urls = old_event.photographs.map(&:image_url)
  attributes = old_event.attributes.except("photographs", "id")

  new_photos = []
  photograph_urls.each do |photo|
    new_photo = Photograph.new({
      remote_image_url: photo
    })

    if new_photo.save
      new_photos << new_photo
    end
  end
  @event = Event.new(attributes)
  @event.photograph_ids = new_photos.map(&:id)

  render "/admin/events/_events_form/"
end

:rgb标签试图修复。但没有运气。

Ruby 2.1和Rails 4.0

1 个答案:

答案 0 :(得分:1)

好的,经过大量的游戏和搜索,我设法解决了这个问题。

首先,您需要下载.icc颜色配置文件,可以找到here。它说对于Windows,但它们似乎在我的Mac上为我工作。

.icc文件放入/lib/color_profiles目录后,将以下代码添加到上传器中:

class ImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::RMagick

  process :convert_image_from_cmyk_to_rgb

  #versions, and any other uploader code go here

  def convert_image_from_cmyk_to_rgb
    manipulate! do |image|
      if image.colorspace == Magick::CMYKColorspace
        image.strip!
        image.add_profile("#{Rails.root}/lib/USWebCoatedSWOP.icc")
        image.colorspace == Magick::SRGBColorspace
        image.add_profile("#{Rails.root}/lib/sRGB.icc")
      end
      image
    end
  end
end

这会将CMYK图像转换为RGB,并保持配置文件保持良好状态,同时保持RGB图像不变,并且不会破坏它们。

我希望这可以帮助将来的某个人,并节省他们花在工作上的时间。