c# - perder - Conversión de RGB a CMYK, utilizando el perfil ICC
cómo convertir una imagen de rgb a cmyk en photoshop (3)
Déjame intentar ayudarte a resolverlo todo:
1) RGB es un formato para describir un valor de color. es decir: 255,0,0 para rojo.
2) HSV es otro formato para describir un valor de color. es decir: 0,100,100 para rojo
Esos dos son los únicos que le darán el color digitalmente preciso ,
puedes pensar en ellos como representación digital del color o es ADN real y gracias a Dios el monitor puede presentarlos, exactamente como son.
Vamonos:
3) Lab es otro formato para describir un valor de color.
54,81,70 para RGB rojo que es (255,0,0) sin embargo ..
54,81,70 también se puede aplicar a un RGB diferente .. (254,0,0)
¿porqué es eso? porque el formato Lab está diseñado para aproximarse a la visión humana.
y para el ojo humano no hay diferencia entre (255,0,0) y (254,0,0)
bueno ... no es muy exacto decir eso para el ojo humano ...
más exacto para decir el modelo que se está utilizando para obtener el color Lab que pretende ...
4) CYMK está diseñado para decirle a la impresora qué mezclas de Cian, Amarillo y Magenta presionar para el papel y K (clave o negro) para la cantidad de oscuridad para presionar en esa mezcla.
Entonces, 0%, 100%, 100%, 0% nos dará la mezcla para rojo ...
y 0%, 50%, 50%, 0% nos dará rosa.
Vamonos:
Su esfuerzo es ajustar el RGB que se ve en el monitor al CMYK de la impresora.
Dios sabe por qué quieres hacer eso cuando ha sido completamente automático y manejado por el conductor por años.
Pero supongo que tienes tus razones, así que continuemos,
Cada impresora tiene valores CMYK ligeramente diferentes para mezclar y llegar a ese rojo específico ..
Y aquí es donde los perfiles de ICC entran en acción.
Proporcionan un estándar para RED en el ejemplo proporcionando una tabla para (1) el RGB-RED original y (2) el rojo CMYK en una impresora específica.
Por lo tanto, es lógico desear convertir de RGB (rojo) a CMYK (rojo) de acuerdo con un perfil ICC.
Pero si intenta convertir de nuevo, notará que el CMYK para RED de acuerdo con un perfil específico puede tener múltiples valores RED rojos.
Esto se debe a que la resolución de color digital es mucho más precisa que la que sale en un papel impreso, otra forma de verlo es decir que un ICC de impresora específico podría haberse construido sobre Lab.
Ahora lo sé ... Lo sé ... probablemente ya sabías la mayor parte, si no todo.
(Lo escribí solo para asegurarnos de que ambos estuviéramos en la misma página del libro).
Entonces, cuando dices "ninguno de ellos devuelve el valor correcto" (asumiendo que = las conversiones) ¿a qué te refieres exactamente? Todo me parece correcto, ya que de hecho devuelven el valor correcto, con fines de impresión.
Estoy a punto de convertir el color RGB a CMYK con fines de impresión. La escala de esta conversión es Adobe Photoshop ( Image -> Mode -> CMYK color )
Intenté la solución 2, pero ninguno de ellos devuelve el valor correcto:
Solución 1 - Usando .NET Framework
Al principio, seguí estos pasos
Descargar perfiles ICC (versión de Windows) desde Adobe
Convierta el
#color
a CMYKused
System.Windows.Media.Color.FromValues // return Color
MSDNstring convretedColor = string.Format("#{0:X2}{1:X2}{2:X2}", _color.R, _color.G, _color.B)
aquí está el resultado:
perfil:
CoatedFOGRA27.icc
Color original:
#2f00ff
Color convertido:
#3b4996
Resultado de la conversión Con Adobe Photoshop (mismo perfil):
#3b4996
ni siquiera cerca!
Solución 2 - Uso de Windows Color System (WCS)
También probé la solución de Codo con el mismo procedimiento
aquí está el resultado:
Perfil:
CoatedFOGRA27.icc
Color original:
#2f00ff
Color convertido:
#2032FF
Photoshop:
#3b4996
EDITAR
De acuerdo con los comentarios de Codo, creo que tengo algunos problemas fundamentales para entender el concepto de colores. ( Por favor corrígeme si estoy equivocado )
Para cualquier color, tenemos diferentes modelos de color, RGB
, CMYK
, ...
RGB
muestra la combinación de (Rojo Verde Azul) para generar color y CMYK también (Cian Magenta Amarillo *). los valores de estos modelos se pueden convertir fácilmente entre sí.
RGB HEX:
#2F00FF
RGB:
47 - 0 - 255
CMYK:
0,816 - 1,000 - 0,000 - 0,000
Casi todos los monitores usan RGB
para mostrar los colores. El color impreso (debido al uso de tinta en lugar de LED o ...) es totalmente diferente del color que se ve en el monitor /
Para este problema, los editores de imágenes como Photoshop usan CMYK **MODE**
. En este modo, si selecciona el color RGB
, el editor lo convertirá a color que verá después de imprimir y lo mostrará a la pantalla. Esta conversión depende absolutamente de Perfiles de color (aquí ICC)
EDIT 2
Puede ser que este fragmento (no probado) ayude un poco. Utiliza la API .NET para ImageMagick .
MagickReadSettings settings = new MagickReadSettings();
settings.ColorSpace = ColorSpace.CMYK;
using (MagickImage image = new MagickImage())
{
image.AddProfile(ColorProfile.CMYK);
image.Read("image_rgb.tiff", settings);
image.Write("image_cmyk.tiff");
}
Si puede usar la línea de comando, esto también hará el trabajo:
convert image_rgb.tiff -profile "RGB.icc" -profile "CMYK.icc" image_cmyk.tiff
Como veo la teoría ...
La gama de CMYK en sí misma es ligeramente más pequeña que RGB, por lo que la diferencia después de la conversión RGB-> CMYK directa será fácilmente visible. Para compensar esa diferencia, se utilizan perfiles de color. Color Profile inside es en realidad un conjunto de transformaciones de color que permite ampliar la gama. En este caso, la fuente de la imagen es solo una fuente para estas transformaciones.
CMYK casi siempre se usa con perfiles de color (me refiero a casos de uso correctos) de lo contrario la pérdida de color será significativa.
En Photoshop intente convertir aquí: Editar -> Convertir a perfil. La principal diferencia con respecto a su camino: puede elegir el perfil CMYK de destino y el motor de administración de color, incluido Microsoft ICM, lo que le puede brindar diferentes resultados.
Aquí hay un buen artículo sobre CMYK: http://www.northlight-images.co.uk/article_pages/colour_management/cmyk_for_photographers.html
En cuanto a la programación ...
Tal vez sea más fácil usar algún SDK de procesamiento de imágenes especializado. Color Management es una característica básica de cualquiera de ellos y debería estar disponible incluso gratis.
Si necesita estimar cómo se imprimirá realmente su color RGB, debe usar la función llamada "prueba en pantalla". Esto es RGB -> CMYK (con perfil de impresora) -> conversión RGB. En Photoshop puedes verificarlo aquí: Ver -> Color de prueba. Puedes hacer lo mismo con los SDK.