{"id":225,"date":"2016-05-22T01:06:07","date_gmt":"2016-05-21T23:06:07","guid":{"rendered":"http:\/\/lab.fawno.com\/?p=225"},"modified":"2022-03-07T01:44:44","modified_gmt":"2022-03-07T00:44:44","slug":"","status":"publish","type":"post","link":"https:\/\/lab.fawno.com\/en\/2016\/05\/22\/php-e-imagemagick-conversion-de-imagenes-cmyk-a-rgb\/","title":{"rendered":"","raw":""},"content":{"rendered":"","protected":false,"raw":""},"excerpt":{"rendered":"","protected":false,"raw":""},"author":1,"featured_media":226,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","_es_post_content":"\n
Seg\u00fan la teor\u00eda se puede visualizar correctamente una imagen CMYK siempre y cuando tenga informaci\u00f3n sobre el perfil de color... en teor\u00eda.<\/p>\n\n\n\n
En la pr\u00e1ctica puedes tener las im\u00e1genes (TIFF en mi caso) sin ning\u00fan tipo de informaci\u00f3n sobre el perfil de color por motivos pr\u00e1cticos. Adem\u00e1s puede que tambi\u00e9n concurran limitaciones con el software de visualizaci\u00f3n.<\/p>\n\n\n\n
En mi caso la imagen de origen tiene perfil WAN-IFRAnewspaper26v5<\/a> (sucesor del ISOnewspaper26v4<\/a>) y para su correcta visualizaci\u00f3n en un visor sin gesti\u00f3n de color hay que convertirla al perfil sRGB<\/a> ya que la gama de colores (aka gamut<\/a>) del WAN-IFRA caben por completo en la gama del sRGB, como se puede comprobar mediante la fabulosa herramienta ICCView<\/a>:<\/p>\n\n\n\n As\u00ed que ya tenemos una soluci\u00f3n al problema \u00bfC\u00f3mo visualizar con suficiente precisi\u00f3n una imagen CMYK en un visor sin gesti\u00f3n de color?: convirtiendo la imagen al perfil sRGB.<\/p>\n\n\n\n Y es cierto, si en Photoshop (y aqu\u00ed no vale Gimp<\/a> porque no puede editar im\u00e1genes CMYK<\/a>) abrimos nuestra imagen, asignamos el perfil WAN-IFRA, convertimos al sRGB compensando el punto negro, con prop\u00f3sito colorim\u00e9trico relativo<\/a><\/strong> y guardamos. Veremos como ahora tenemos una imagen en RGB con los colores casi id\u00e9nticos al original CMYK. Esta es, digamos, la demostraci\u00f3n pr\u00e1ctica de nuestra soluci\u00f3n.<\/p>\n\n\n\n Ahora que ya sabemos lo que hay que hacer y hemos hecho una prueba de concepto, toca automatizar la tarea, para lo cual nos apoyaremos en ImageMagick<\/a>.<\/p>\n\n\n\n ImageMagick es una de esas piezas de c\u00f3digo libre (licencia Apache<\/a>) que suponen una aut\u00e9ntica joya. Nos pone al alcance de la mano una poderosa herramienta de manipulaci\u00f3n de im\u00e1genes para su uso tanto de manera manual como para su integraci\u00f3n tanto en scripts (PHP<\/a>, Python<\/a>...) como en aplicaciones de diverso tipo (C++, .NET...).<\/p>\n\n\n\n En este caso tambi\u00e9n hay que hacer una prueba de concepto, para ello se busca un poco por ah\u00ed y se da con la linea de comando correcta:<\/p>\n\n\n\n Es f\u00e1cil comprobar como apenas hay diferencias entre la imagen que hemos hecho a mano con el Photoshop con la que hemos obtenido por medio de ImageMagick: vamos por buen camino.<\/p>\n\n\n\n Y llega la hora del PHP, utilizando la librer\u00eda PECL<\/a> para ImageMagick (IMagick<\/a>):<\/p>\n\n\n\n Vale, el c\u00f3digo tiene poco que comentar... abrimos la imagen convertida en sRGB y vemos c\u00f3mo lo que tenemos es una imagen \"lavada\", como si le hubieran dado un velo blanco. He remarcado antes que hab\u00eda que compensar el punto negro<\/strong>, sea lo que demonios sea<\/a> (no voy a explicarlo ahora). Digamos que experimentalmente es lo que hemos comprobado que funciona. Pues bien, aunque hemos hecho un setOption<\/em> para habilitar la compensaci\u00f3n del punto negro, el IMagick no lo soporta<\/a> (a\u00fan).<\/p>\n\n\n\n As\u00ed que hay que buscar otra manera, y yo he probado los objetos COM<\/a>. El porqu\u00e9 he elegido esta t\u00e9cnica es porque la conozco al utilizarla para controlar Acrobat y otras aplicaciones mediante PHP. Para poder utilizar COM con PHP<\/a> hay que habilitar la extensi\u00f3n php_dcom_dotnet.dll<\/a> (\u00bfno he mencionado que el entorno de este trabajo es Windows?, pues ya lo sabes). El c\u00f3digo:<\/p>\n\n\n\n Obviando que he habilitado un array para contener tantos ficheros a tratar como deseemos, hay varias consideraciones a tener en cuenta:<\/p>\n\n\n\n Y ya est\u00e1, no hemos acabado la guerra a\u00fan, pero ha sido una batalla importante la de hoy.<\/p>\n","_es_post_name":"php-e-imagemagick-conversion-de-imagenes-cmyk-a-rgb","_es_post_excerpt":"","_es_post_title":"PHP e ImageMagick, conversi\u00f3n de im\u00e1genes CMYK a RGB","_en_post_content":"","_en_post_name":"","_en_post_excerpt":"","_en_post_title":"","edit_language":"en","footnotes":""},"categories":[39,5],"tags":[40,6],"class_list":["post-225","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gestion-de-color","category-php","tag-gestion-de-color","tag-php"],"ninja_gutenberg_blocks_featured_media_urls":{"thumbnail":["https:\/\/lab.fawno.com\/wp-content\/uploads\/2016\/05\/WAN-IFRAnewspaper26v5-vs-sRGB-150x150.jpg",150,150,true],"ninja_gutenberg_blocks_landscape_large":["https:\/\/lab.fawno.com\/wp-content\/uploads\/2016\/05\/WAN-IFRAnewspaper26v5-vs-sRGB.jpg",396,289,false],"ninja_gutenberg_blocks_portrait_large":["https:\/\/lab.fawno.com\/wp-content\/uploads\/2016\/05\/WAN-IFRAnewspaper26v5-vs-sRGB.jpg",396,289,false],"ninja_gutenberg_blocks_square_large":["https:\/\/lab.fawno.com\/wp-content\/uploads\/2016\/05\/WAN-IFRAnewspaper26v5-vs-sRGB.jpg",396,289,false],"ninja_gutenberg_blocks_landscape":["https:\/\/lab.fawno.com\/wp-content\/uploads\/2016\/05\/WAN-IFRAnewspaper26v5-vs-sRGB.jpg",396,289,false],"ninja_gutenberg_blocks_portrait":["https:\/\/lab.fawno.com\/wp-content\/uploads\/2016\/05\/WAN-IFRAnewspaper26v5-vs-sRGB.jpg",396,289,false],"ninja_gutenberg_blocks_square":["https:\/\/lab.fawno.com\/wp-content\/uploads\/2016\/05\/WAN-IFRAnewspaper26v5-vs-sRGB.jpg",396,289,false],"full":["https:\/\/lab.fawno.com\/wp-content\/uploads\/2016\/05\/WAN-IFRAnewspaper26v5-vs-sRGB.jpg",396,289,false]},"_links":{"self":[{"href":"https:\/\/lab.fawno.com\/en\/wp-json\/wp\/v2\/posts\/225","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lab.fawno.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lab.fawno.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lab.fawno.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lab.fawno.com\/en\/wp-json\/wp\/v2\/comments?post=225"}],"version-history":[{"count":17,"href":"https:\/\/lab.fawno.com\/en\/wp-json\/wp\/v2\/posts\/225\/revisions"}],"predecessor-version":[{"id":1865,"href":"https:\/\/lab.fawno.com\/en\/wp-json\/wp\/v2\/posts\/225\/revisions\/1865"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lab.fawno.com\/en\/wp-json\/wp\/v2\/media\/226"}],"wp:attachment":[{"href":"https:\/\/lab.fawno.com\/en\/wp-json\/wp\/v2\/media?parent=225"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lab.fawno.com\/en\/wp-json\/wp\/v2\/categories?post=225"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lab.fawno.com\/en\/wp-json\/wp\/v2\/tags?post=225"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}<\/a>
convert -black-point-compensation -intent Relative ImageCMYK.tif -profile ISOnewspaper26v4.icc -profile sRGB.icc ImageRGB.png<\/pre>\n\n\n\n
$image = new Imagick('ImageCMYK.tif');\n\n$image->setImageRenderingIntent(Imagick::RENDERINGINTENT_RELATIVE);\n$image->setOption('black_point_compensation', true);\n\n$icc_cmyk = file_get_contents('ISOnewspaper26v4.icc');\n$image->profileImage('icc', $icc_cmyk);\n\n$icc_rgb = file_get_contents('sRGB Color Space Profile.icm');\n$image->profileImage('icc', $icc_rgb);\n\n$image->setImageColorSpace(Imagick::COLORSPACE_SRGB);\n\n$image->writeImage('ImageRGB.jpg');<\/pre>\n\n\n\n
$MagickImage = new COM('ImageMagickObject.MagickImage') or die ('ImageMagickObject didn\\'t load, too bad');\n\n$cmyk = 'WAN-IFRAnewspaper26v5.icc';\n$rgb = 'sRGB Color Space Profile.icm';\n\n$files[] = ['i' => 'ImageCMYK.tif', 'o' => 'ImageRGB.png'];\nforeach ($files as $file) {\n try {\n $MagickImage->Convert((string) $file['i'], '-black-point-compensation', '-intent', 'Relative', '-profile', (string) $cmyk, '-profile', (string) $rgb, (string) $file['o']);\n } catch (Exception $e) {\n print_r($e);\n }\n}\n$MagickImage = null;<\/pre>\n\n\n\n
$MagickImage = null;<\/code><\/li><\/ul>\n\n\n\n