2017-06-23 3 views
3

私はいくつかの異なる方法の前に尋ねられましたが、私の問題に関連していないようです。のようなカラープロファイルを使用して、CMYKの色を正確にRGBに変換したいと思います。私はこのようにしたいのですが、簡単な数学的変換により、色空間が明るい色を得ることができなくなります。CMYKISO V2 Coatedのようなカラープロファイルを使用して、CMYKカラーをRGBに変換しますか?

The difference between: Real Cyan and RGB Cyan

理想的には、これはRubyで実現することができるが、私は擬似コード、あるいはJavaScriptで解決策を見て幸せになります。 私は独自の/不透明なフレームワークに依存するsolutionを避けることを好むでしょう。

答えて

1

以下の方法ImageMagick介しRuby環境における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

0

CMYKに表示される値がパーセント(100/0/0/0)であると仮定します。 ImageMagickのコマンドラインでは、見本

convert xc:"cmyk(100%,0%,0%,7%)" -profile /Users/fred/images/profiles/ISOcoated_v2_300_eci.icc -profile /Users/fred/images/profiles/sRGB.icc -scale 100x100! test.png 

enter image description here

または、次のようにあなただけ戻って値を取得することができますを作るために次の操作を行うことができます。

convert xc:"cmyk(100%,0%,0%,7%)" -profile /Users/fred/images/profiles/ISOcoated_v2_300_eci.icc -profile /Users/fred/images/profiles/sRGB.icc -format "%[pixel:u.p{0,0}]\n" info: 


のsRGBを(0 %、61%、81%)

値を0〜むしろ%以上255、次いで-depth 8

convert xc:"cmyk(100%,0%,0%,7%)" -profile /Users/fred/images/profiles/ISOcoated_v2_300_eci.icc -profile /Users/fred/images/profiles/sRGB.icc -depth 8 -format "%[pixel:u.p{0,0}]\n" info: 


のsRGB(0156207)

を追加また、0と255

convert xc:"cmyk(255,0,0,17.85)" -profile /Users/fred/images/profiles/ISOcoated_v2_300_eci.icc -profile /Users/fred/images/profiles/sRGB.icc -depth 8 -format "%[pixel:u.p{0,0}]\n" info: 


間の値で始めることができますsrgb(0,156,207)

これはRMagickで行うことができますが、私はRMagickの専門家ではありません。しかし、sambeckerの他の投稿を参照してください。

関連する問題