{"id":3168,"date":"2008-10-03T13:12:03","date_gmt":"2008-10-03T11:12:03","guid":{"rendered":"http:\/\/www.boscarol.com\/blog\/?p=3168"},"modified":"2010-05-16T21:11:13","modified_gmt":"2010-05-16T19:11:13","slug":"gestione-colore-in-postscript","status":"publish","type":"post","link":"http:\/\/www.boscarol.com\/blog\/?p=3168","title":{"rendered":"PostScript: gestione colore"},"content":{"rendered":"<p>La prima versione di PostScript pu\u00f2 descrivere solo colori a scala di grigi e colori RGB, senza profilo (<em>device dependent<\/em>).<\/p>\n<p>Da PostScript Level 2 (che precede ColorSync e le specifiche ICC) il linguaggio pu\u00f2 descrivere anche colori CMYK. Non esiste ancora il concetto di &#8220;profilo colore&#8221; (intendo profilo colore PostScript, non profilo colore ICC che PostScript non ha mai supportato e mai supporter\u00e0) e le modalit\u00e0 di colore sono indicate con il prefisso Device, rispettivamente<\/p>\n<ul>\n<li>DeviceRGB;<\/li>\n<li>DeviceCMYK;<\/li>\n<li>DeviceGray.<\/li>\n<\/ul>\n<p>Per questi colori (che sono senza profilo) PostScript prevede conversioni con algoritmi predefiniti: l&#8217;algoritmo pi\u00f9 utilizzato, quello per la conversione da RGB a CMYK, \u00e8 l&#8217;algoritmo &#8220;1 meno&#8221; descritto nel manuale PostScript Level 2. Si tratta di un modo grossolano per convertire da RGB a CMYK. In mancanza di altro, come ultima risorsa, PostScript ricorre ancor oggi a questo metodo:<\/p>\n<div style=\"padding-left: 30px; font-size: 11px;\">Si parte dai valori RGB normalizzati tra 0 e 1\u00a0(cio\u00e8 gli usuali valori tra 0 e 255 divisi per 255):<br \/>\n<tt><\/p>\n<ol>\n<li class=\"codice\">c = 1 - R;<\/li>\n<li class=\"codice\">m = 1 - G;<\/li>\n<li class=\"codice\">y = 1 - B;<\/li>\n<li class=\"codice\">k = min (c, m, y)<\/li>\n<li class=\"codice\">C = min (1, max (0, c - UCR(k)));<\/li>\n<li class=\"codice\">M = min (1, max (0, m - UCR(k)))<\/li>\n<li class=\"codice\">Y = min (1, max (0, y - UCR(k)));<\/li>\n<li class=\"codice\">K = min (1, max (0, BG(k)))<\/li>\n<\/ol>\n<p><\/tt>c, m, y e k sono valori intermedi, k in particolare \u00e8 la parte di nero che pu\u00f2 essere rimossa dagli altri colori. C, M, Y e K sono i valori finali, normalizzati tra 0 e 1 (per avere i valori percentuali si moltiplica per 100).<\/p>\n<p>UCR (<em>Under Color Removal<\/em>) e BG (<em>Black Generation<\/em>) sono due procedure presenti nel rip. La prima pu\u00f2 ritornare un numero tra 0 e k, o addirittura negativo. La seconda un numero tra 0 e k, o anche maggiore.<\/p>\n<\/div>\n<p>Da Level 2, PostScript contiene un proprio sistema di\u00a0<strong>descrizione<\/strong> del colore e da Level 3 (pi\u00f9 precisamente dalla versione 2016 del Level 2) ha un proprio sistema di\u00a0<strong>gestione<\/strong> del colore completo di profili, intenti di rendering e motore di colore. Questo sistema, detto <em>PostScript Color Management<\/em> (PCM), agisce come \u00e8 intuibile solo in fase di stampa, precisamente all&#8217;interno di un rip PostScript.<\/p>\n<p>Il sistema di gestione colore di PostScript \u00e8 stato il primo sistema di questo tipo ad essere implementato per l&#8217;uso con sistemi non dedicati (cio\u00e8 con personal computer).<\/p>\n<p>La conversione di colore in PCM pu\u00f2 essere effettuata solo se sono presenti un profilo di origine e uno di destinazione. Il profilo di origine (che converte da coordinate di periferica\u00a0<strong>a <\/strong>coordinate colorimetriche) \u00e8 specificato nel programma PostScript che viene caricato nel rip; il profilo di destinazione (che converte\u00a0<strong>da<\/strong> coordinate colorimetriche a coordinate di periferica) \u00e8 il profilo della stampante, che risiede nel RIP della stampante.<\/p>\n<p>In PCM dunque, tra profilo di origine e profilo di destinazione vi \u00e8 una naturale separazione: il primo sta nel programma PostScript, il secondo sta nel rip stesso. Per questo motivo il profilo PCM \u00e8\u00a0<strong>unidirezionale<\/strong>:<\/p>\n<ul>\n<li>il profilo di origine, che sta nel programma PostScript e converte da coordinate di periferica a coordinate colorimetriche, \u00e8 detto\u00a0<em>color space array,<\/em> <strong>CSA<\/strong>;<\/li>\n<li>il profilo di destinazione, che sta nel rip e converte da coordinate colorimetriche a coordinate di periferica, \u00e8 detto<em> color rendering dictionary,<\/em> <strong>CRD<\/strong>.<\/li>\n<\/ul>\n<p>CSA e CRD esistono solo come istruzioni del linguaggio PostScript, non come file, e sono espressi in termini dello spazio colorimetrico XYZ CIE 1931. In PostScript, i colori che fanno riferimento ad un profilo PostScript sono detti\u00a0<strong>CIEBased<\/strong> (perch\u00e9 sono basati sullo spazio CIE XYZ).<\/p>\n<p>PostScript Color Management funziona cos\u00ec:<\/p>\n<ol>\n<li>Le istruzioni PostScript vengono trasmesse al rip per l&#8217;interpretazione e la stampa successiva, e nel flusso dei dati (printing stream) viene inserito anche il (o i) CSA che contiene (o contengono) le informazioni per convertire i dati di colore (per esempio RGB) dallo spazio di origine allo spazio XYZ.<\/li>\n<li>Nel rip risiede il CRD, il profilo che contiene le informazioni per trasformare da coordinate XYZ a percentuali di inchiostro di quella stampante.<\/li>\n<li>Quando le istruzioni PostScript con il relativo CSA arrivano al rip, l&#8217;interprete PostScript (che funziona come motore di colore) converte i dati di colore (per esempio RGB) in XYZ e, sulla base del CRD, esegue la procedura di rendering programmata, che converte i colori da XYZ in percentuali di inchiostri della stampante.<\/li>\n<\/ol>\n<p>Il modo in cui tale conversione viene effettuata \u00e8 definito dal programmatore del rip usando quelle che in PostScript sono dette\u00a0<em>color rendering procedures<\/em>. Un CRD pu\u00f2 contenere un unico intento di rendering.<\/p>\n<p><strong>Color Space Array (CSA)<\/strong><\/p>\n<p>Il CSA ha le informazioni per tradurre i dati di colore dallo spazio di origine allo spazio XYZ (analogamente alla parte &#8220;da periferica a spazio&#8221; di un profilo ICC). Viene inserito nel flusso di stampa PostScript nel momento in cui un lavoro grafico viene stampato oppure risiede in un file PostScript (.ps), in un file EPS (.eps), in un file DCS (.dcs) o in un file prestampa. Nessun altro formato grafico supporta i CSA (PDF per\u00f2 supporta una descrizione molto simile).<\/p>\n<p>Un CSA Level 2 pu\u00f2 essere a 1 o 3 canali, \u00e8 sempre a matrice (cio\u00e8 basato su un algoritmo) e pu\u00f2 essere utilizzato per definire un grande numero di spazi colore, tutti quelli che si possono esprimere con profili ICC e molti altri (in effetti non molto usati).<\/p>\n<p>Un CSA pu\u00f2 indicare che i valori di colore sono espressi in coordinate assolute (per esempio Lab o XYZ, con un certo punto bianco) o in un particolare spazio RGB (che viene detto<strong>CalibratedRGB<\/strong> per distinguerlo da DeviceRGB) o altro (per esempio YIQ, lo standard televisivo americano NTSC e quello europeo PAL e SECAM YUV).<\/p>\n<p>In PostScript<strong> 3<\/strong> sono supportati anche CSA a 3 e 4 canali a tabella (che possono essere usati per descrivere per esempio per lo spazio Luv, per RGB e CMYK a tabella,\u00a0<strong>CalibratedCMYK<\/strong>).<\/p>\n<p>Per chi conosce i profili ICC faccio notare che un CSA \u00e8 analogo ad un profilo ICC di scanner oppure a met\u00e0 profilo ICC di monitor o di stampante, precisamente alla parte &#8220;a PCS&#8221;, la parte utilizzata quando il profilo \u00e8 di origine.<\/p>\n<p><strong>Color Rendering Dictionary (CRD)<\/strong><\/p>\n<p>Un CRD \u00e8 analogo alla parte &#8220;da PCS&#8221; di un profilo ICC di stampante, cio\u00e8 alla parte utilizzata quando il profilo agisce come destinazione.<\/p>\n<p>Un CRD contiene un solo intento di rendering. Se si desiderano diversi intenti di rendering \u00e8 necessario avere diversi CRD. (Un profilo ICC pu\u00f2 invece contenere fino a quattro intenti di rendering.)<\/p>\n<p>Nel prossimo post c&#8217;\u00e8 una tabella riassuntiva dei profili PostScript.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La prima versione di PostScript pu\u00f2 descrivere solo colori a scala di grigi e colori RGB, senza profilo (device dependent). Da PostScript Level 2 (che precede ColorSync e le specifiche ICC) il linguaggio pu\u00f2 descrivere anche colori CMYK. Non esiste ancora il concetto di &#8220;profilo colore&#8221; (intendo profilo colore PostScript, non profilo colore ICC che [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[251],"tags":[29,252,1572],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/pjoVH-P6","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"http:\/\/www.boscarol.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/3168"}],"collection":[{"href":"http:\/\/www.boscarol.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.boscarol.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.boscarol.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.boscarol.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3168"}],"version-history":[{"count":11,"href":"http:\/\/www.boscarol.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/3168\/revisions"}],"predecessor-version":[{"id":3233,"href":"http:\/\/www.boscarol.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/3168\/revisions\/3233"}],"wp:attachment":[{"href":"http:\/\/www.boscarol.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3168"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.boscarol.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3168"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.boscarol.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3168"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}