javascript - 使用 ISO V2 Coated 等颜色配置文件将 CMYK 颜色转换为 RGB?

标签 javascript ruby-on-rails ruby web-services colors

我知道这个问题已经被问过几个不同的方式,但似乎没有一个与我的问题相关:我想使用颜色配置文件,例如 ISO Coated V2。我想这样做是因为直接的数学转换会导致在 CMYK 颜色空间中无法实现明亮的颜色。

The difference between: Real Cyan and RGB Cyan

理想情况下,这可以在 Ruby 中实现,但我很高兴看到伪代码甚至 JavaScript 的解决方案。 我宁愿避免 solution依赖于专有/不透明的框架。

有什么想法吗?

最佳答案

以下方法通过 ImageMagickRuby 环境中执行 CMYK/RGB 颜色管理转换:

def convert_cmyk_to_rgb_with_profiles(cmyk, profile_1, profile_2)
  c = MiniMagick::Tool::Convert.new

  c_255 = (cmyk[:c].to_f / 100.0 * 255.0).to_i
  m_255 = (cmyk[:m].to_f / 100.0 * 255.0).to_i
  y_255 = (cmyk[:y].to_f / 100.0 * 255.0).to_i
  k_255 = (cmyk[:k].to_f / 100.0 * 255.0).to_i

  c.xc("cmyk(#{c_255}, #{m_255}, #{y_255}, #{k_255})")
  c.profile(File.open("lib/assets/profiles/#{profile_1}.icc").path)
  c.profile(File.open("lib/assets/profiles/#{profile_2}.icc").path)
  c.format("%[pixel:u.p{0,0}]\n", "info:")
  result = c.call

  srgb_values = /srgb\(([0-9.]+)%,([0-9.]+)%,([0-9.]+)%\)/.match(result)

  r = (srgb_values[1].to_f / 100.0 * 255.0).round
  g = (srgb_values[2].to_f / 100.0 * 255.0).round
  b = (srgb_values[3].to_f / 100.0 * 255.0).round

  return { r: r, g: g, b: b }
end

通过调用:

convert_cmyk_to_rgb_with_profiles({c:100, m:0, y:0, k:0}, "USWebCoatedSWOP", "sRGB_IEC61966-2-1_black_scaled")

可以在此处找到此解决方案的基础以及更多详细信息和上下文:

Converting colors (not images) with ImageMagick

关于javascript - 使用 ISO V2 Coated 等颜色配置文件将 CMYK 颜色转换为 RGB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44730949/

相关文章:

ruby-on-rails - 符号查找错误: node: undefined symbol: _ZN2v86LockerC1EPNS_7IsolateE

ruby-on-rails - Rails事件记录的 'where'方法异常

ruby-on-rails - Secrets.yml 与 ENV 变量与选项?

javascript - 使用 JQuery 附加输入框

javascript - 如何批量解析网页?

javascript - 将背景图像保存到状态

javascript - 使用 jquery 和 css 图像全屏

ruby-on-rails - Ruby - 将 CSV 中的条目插入数据库

ruby - 你能在 Ruby 中的一行中创建/写入/附加一个字符串到文件吗

ruby-on-rails - "Could not find concurrent-ruby-1.1.7 in any of the sources"使用 capistrano 部署 rails