【问题标题】:Duplicating Carrierwave images makes them darker?复制载波图像会使它们变暗?
【发布时间】:2014-03-28 03:53:18
【问题描述】:

我有一个 Event 模型,其中包含许多 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

【问题讨论】:

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


    【解决方案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 图像原样,而不是破坏它们。

    我希望这对将来的某人有所帮助,并为他们节省我花在解决这个问题上的时间。

    【讨论】:

      猜你喜欢
      • 2014-12-24
      • 1970-01-01
      • 2019-09-13
      • 1970-01-01
      • 2016-07-23
      • 2015-09-03
      • 1970-01-01
      • 2011-04-28
      • 2017-03-07
      相关资源
      最近更新 更多