我的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
答案 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图像不变,并且不会破坏它们。
我希望这可以帮助将来的某个人,并节省他们花在工作上的时间。