1e8af9738SPeter Avalos 2e8af9738SPeter Avalos#------------------------------------------------------------------------------ 3*614728caSSascha Wildner# $File: icc,v 1.7 2021/04/26 15:56:00 christos Exp $ 4e8af9738SPeter Avalos# icc: file(1) magic for International Color Consortium file formats 5e8af9738SPeter Avalos 6e8af9738SPeter Avalos# 7e8af9738SPeter Avalos# Color profiles as per the ICC's "Image technology colour management - 8e8af9738SPeter Avalos# Architecture, profile format, and data structure" specification. 9e8af9738SPeter Avalos# See 10e8af9738SPeter Avalos# 11e8af9738SPeter Avalos# http://www.color.org/specification/ICC1v43_2010-12.pdf 12e8af9738SPeter Avalos# 13e8af9738SPeter Avalos# for Specification ICC.1:2010 (Profile version 4.3.0.0). 14c30bd091SSascha Wildner# URL: http://fileformats.archiveteam.org/wiki/ICC_profile 15c30bd091SSascha Wildner# Reference: http://www.color.org/iccmax/ICC.2-2016-7.pdf 16c30bd091SSascha Wildner# Update: Joerg Jenderek 17e8af9738SPeter Avalos# 18e8af9738SPeter Avalos# Bytes 36 to 39 contain a generic profile file signature of "acsp"; 19e8af9738SPeter Avalos# bytes 40 to 43 "may be used to identify the primary platform/operating 20e8af9738SPeter Avalos# system framework for which the profile was created". 21e8af9738SPeter Avalos# 22c30bd091SSascha Wildner# check and display ICC/ICM color profile 23c30bd091SSascha Wildner0 name color-profile 24c30bd091SSascha Wildner>36 string acsp 25c30bd091SSascha Wildner# skip ASCII like Cognacspirit.txt by month <= 12 26c30bd091SSascha Wildner>>26 ubeshort <13 27c30bd091SSascha Wildner# platform/operating system. Only 5 mentioned 28e8af9738SPeter Avalos 29c30bd091SSascha Wildner# 30e8af9738SPeter Avalos# This appears to be what's used for Apple ColorSync profiles. 31e8af9738SPeter Avalos# Instead of adding that, Apple just changed the generic "acsp" entry 32e8af9738SPeter Avalos# to be for "ColorSync ICC Color Profile" rather than "Kodak Color 33e8af9738SPeter Avalos# Management System, ICC Profile". 34e8af9738SPeter Avalos# Yes, it's "APPL", not "AAPL"; see the spec. 35c30bd091SSascha Wildner>>>40 string APPL ColorSync 36e8af9738SPeter Avalos 37e8af9738SPeter Avalos# Microsoft ICM color profile 38c30bd091SSascha Wildner>>>40 string MSFT Microsoft 39e8af9738SPeter Avalos 40e8af9738SPeter Avalos# Yes, that's a blank after "SGI". 41c30bd091SSascha Wildner>>>40 string SGI\ SGI 42e8af9738SPeter Avalos 43e8af9738SPeter Avalos# XXX - is this what's used for the Sun KCMS or not? The standard file 44e8af9738SPeter Avalos# uses just "acsp" for that, but Apple's file uses it for "ColorSync", 45e8af9738SPeter Avalos# and there *is* an identified "primary platform" value of SUNW. 46c30bd091SSascha Wildner>>>40 string SUNW Sun KCMS 47c30bd091SSascha Wildner 48c30bd091SSascha Wildner# 5th platform 49c30bd091SSascha Wildner>>>40 string TGNT Taligent 50c30bd091SSascha Wildner 51c30bd091SSascha Wildner# remaining "l" "e" of "color profile" printed later to avoid error 52c30bd091SSascha Wildner>>>40 string x color profi 53c30bd091SSascha Wildner#>>>40 string x (%.4s) 54e8af9738SPeter Avalos!:mime application/vnd.iccprofile 55c30bd091SSascha Wildner# for "ICM" extension only versions 2.x and for Kodak "CC" 2.0 is found 56c30bd091SSascha Wildner>>>8 ubyte =2 576fca56fbSSascha Wildner# do not use empty message text to avoid error like 58c30bd091SSascha Wildner# icc, 82: Warning: Current entry does not yet have a description for adding a EXTENSION type 59c30bd091SSascha Wildner# file.exe: could not find any valid magic files! 60c30bd091SSascha Wildner>>>>9 ubyte !0 \ble 61c30bd091SSascha Wildner!:ext icc/icm 62c30bd091SSascha Wildner# minor version 63c30bd091SSascha Wildner>>>>9 ubyte =0 \bl 64c30bd091SSascha Wildner# Kodak colour management system 65c30bd091SSascha Wildner>>>>>4 string =KCMS \be 66c30bd091SSascha Wildner!:ext icc/icm/cc 67c30bd091SSascha Wildner>>>>>4 string !KCMS \be 68c30bd091SSascha Wildner!:ext icc/icm 69c30bd091SSascha Wildner>>>8 ubyte !2 \ble 70c30bd091SSascha Wildner!:ext icc 71c30bd091SSascha Wildner# Profile version major.4bit-minor.sub1.sub2 like 4.3.0.0 (04300000h) 72c30bd091SSascha Wildner>>>8 ubyte x %u 73c30bd091SSascha Wildner>>>9 ubyte/16 x \b.%u 74c30bd091SSascha Wildner# reserved and shall be null but 205.205 in umx1220u.icm 75c30bd091SSascha Wildner>>>10 ubyte >0 \b.%u 76c30bd091SSascha Wildner>>>>11 ubyte >0 \b.%u 77c30bd091SSascha Wildner# preferred colour management module like appl CCMS KCMS Lino UCCM "Win " "FF " 78c30bd091SSascha Wildner# skip space like in brmsl08f.icm and null like in brmsl09f.icm, brmsl07f.icm 79c30bd091SSascha Wildner>>>4 string >\ \b, type %.2s 80c30bd091SSascha Wildner>>>>6 string >\ \b%.1s 81c30bd091SSascha Wildner>>>>>7 string >\ \b%.1s 82c30bd091SSascha Wildner# colour space "XYZ " "Lab " "RGB " CMYK GRAY ... 83c30bd091SSascha Wildner>>>16 string x \b, %.3s 84c30bd091SSascha Wildner>>>19 string >\ \b%.1s 85c30bd091SSascha Wildner# Profile Connection Space (PCS) field usually "XYZ " or "Lab " but sometimes 86c30bd091SSascha Wildner# null or CMYK like in ISOcoated_v2_to_PSOcoated_v3_DeviceLink.icc 87c30bd091SSascha Wildner>>>20 string >\0 \b/%.3s 88c30bd091SSascha Wildner>>>>23 string >\ \b%.1s 89c30bd091SSascha Wildner# eleven device classes 90c30bd091SSascha Wildner>>>12 string x \b-%.4s device 91c30bd091SSascha Wildner# skip 00001964h in hpf69000.icc or 0h in XRDC50Q.ICM or " ROT" in brmsl05f.icm 92c30bd091SSascha Wildner>>>52 string >\040 93c30bd091SSascha Wildner# skip "none" model like in "Trinitron Compatible 9300K G2.2.icm" 94c30bd091SSascha Wildner>>>>52 ubelong !0x6e6f6e65 95c30bd091SSascha Wildner# device manufacturer field like "HP " "IBM " EPSO 96c30bd091SSascha Wildner>>>>>48 string x \b, %.2s 97c30bd091SSascha Wildner>>>>>50 string >\ \b%.1s 98c30bd091SSascha Wildner>>>>>51 string >\ \b%.1s 99c30bd091SSascha Wildner# model like "ADI " "A265" and skip 20000404h in IS330.icm for RICOH RUSSIAN-SC 100c30bd091SSascha Wildner>>>>>52 string >\ \ \b/%.3s 101c30bd091SSascha Wildner>>>>>>55 string >\ \b%.1s 102c30bd091SSascha Wildner>>>>>52 string x model 103c30bd091SSascha Wildner# creator (often same as manufacture) like HP SONY XROX or null like in A925A.icm 104c30bd091SSascha Wildner>>>80 string >\0 by %.2s 105c30bd091SSascha Wildner>>>>82 string >\ \b%.1s 106c30bd091SSascha Wildner>>>>>83 string >\ \b%.1s 107c30bd091SSascha Wildner# profile size 108c30bd091SSascha Wildner>>>0 ubelong x \b, %u bytes 109c30bd091SSascha Wildner# skip invalid date 0 like in linearSRGB.icc 110c30bd091SSascha Wildner>>>24 ubequad !0 111c30bd091SSascha Wildner# datetime dd-mm-yyyy hh:mm:ss 112c30bd091SSascha Wildner>>>>28 ubeshort x \b, %u 113c30bd091SSascha Wildner# month <= 12 114c30bd091SSascha Wildner>>>>26 ubeshort x \b-%u 115c30bd091SSascha Wildner# year 116c30bd091SSascha Wildner>>>>24 ubeshort x \b-%u 117c30bd091SSascha Wildner# do not display midnight time like in CNHP8308.ICC 118c30bd091SSascha Wildner>>>>30 ubequad&0xFFffFFffFFff0000 !0 119c30bd091SSascha Wildner# hour <= 24 120c30bd091SSascha Wildner>>>>>30 ubeshort x %u 121c30bd091SSascha Wildner# minutes <= 59 122c30bd091SSascha Wildner>>>>>32 ubeshort x \b:%.2u 123c30bd091SSascha Wildner# seconds <= 59 124c30bd091SSascha Wildner>>>>>34 ubeshort x \b:%.2u 125c30bd091SSascha Wildner# vendor specific flags like 2 in HPCLJ5.ICM 126*614728caSSascha Wildner>>>44 ubeshort >0 \b, %#x vendor flags 127c30bd091SSascha Wildner# profile flags bits 0-2 of least 16 used by ICC 128*614728caSSascha Wildner#>>>44 ubelong >0 \b, %#x flags 129c30bd091SSascha Wildner# icEmbeddedProfileTrue 130c30bd091SSascha Wildner>>>44 ubelong &1 \b, embedded 131c30bd091SSascha Wildner# icEmbeddedProfileFalse 132c30bd091SSascha Wildner#>>>44 ubelong ^1 \b, not embedded 133c30bd091SSascha Wildner# icUseWithEmbeddedDataOnly 134c30bd091SSascha Wildner>>>44 ubelong &2 \b, dependently 135c30bd091SSascha Wildner# icUseAnywhere 136c30bd091SSascha Wildner#>>>44 ubelong ^2 \b, independently 137c30bd091SSascha Wildner>>>44 ubelong &4 \b, MCS 138c30bd091SSascha Wildner#>>>44 ubelong ^4 \b, no MCS 139c30bd091SSascha Wildner# vendor specific device attributes 1~srgb.icc 140c30bd091SSascha Wildner# E000D00h~CNB7QEDA.ICM C000A00h~CNB5FCAA.ICM 01040401h~CNB25PE3.ICM 141*614728caSSascha Wildner>>>56 ubelong >0 \b, %#x vendor attribute 142c30bd091SSascha Wildner# ICC device attributes bits 0-7 used 143*614728caSSascha Wildner#>>>60 ubelong x \b, %#x attribute 144c30bd091SSascha Wildner# http://www.color.org/icc34.h 145c30bd091SSascha Wildner>>>60 ubelong &0x01 \b, transparent 146c30bd091SSascha Wildner#>>>60 ubelong ^0x01 \b, reflective 147c30bd091SSascha Wildner>>>60 ubelong &0x02 \b, matte 148c30bd091SSascha Wildner#>>>60 ubelong ^0x02 \b, glossy 149c30bd091SSascha Wildner>>>60 ubelong &0x04 \b, negative 150c30bd091SSascha Wildner#>>>60 ubelong ^0x04 \b, positive 151c30bd091SSascha Wildner>>>60 ubelong &0x08 \b, black&white 152c30bd091SSascha Wildner#>>>60 ubelong ^0x08 \b, colour 153c30bd091SSascha Wildner>>>60 ubelong &0x10 \b, non-paper 154c30bd091SSascha Wildner#>>>60 ubelong ^0x10 \b, paper 155c30bd091SSascha Wildner>>>60 ubelong &0x20 \b, non-textured 156c30bd091SSascha Wildner#>>>60 ubelong ^0x20 \b, textured 157c30bd091SSascha Wildner>>>60 ubelong &0x40 \b, non-isotropic 158c30bd091SSascha Wildner#>>>60 ubelong ^0x40 \b, isotropic 159c30bd091SSascha Wildner>>>60 ubelong &0x80 \b, self-luminous 160c30bd091SSascha Wildner#>>>60 ubelong ^0x80 \b, non-self-luminous 161c30bd091SSascha Wildner# rendering intent 0-3 but 7AEA5027h in EE051__1.ICM 6CB1BCh in EE061__1.ICM 162*614728caSSascha Wildner>>>64 ubelong >3 \b, %#x rendering intent 163c30bd091SSascha Wildner#>>>64 ubelong =0 \b, perceptual 164c30bd091SSascha Wildner>>>64 ubelong =1 \b, relative colorimetric 165c30bd091SSascha Wildner>>>64 ubelong =2 \b, saturation 166c30bd091SSascha Wildner>>>64 ubelong =3 \b, absolute colorimetric 167c30bd091SSascha Wildner# PCS illuminant (3*s15Fixed16Numbers) often 0000f6d6 00010000 0000d32d 168c30bd091SSascha Wildner>>>71 ubequad !0xd6000100000000d3 \b, PCS 169c30bd091SSascha Wildner# usually X~0.9642*65536=63189.8112~63190=F6D5h ; but also found 170c30bd091SSascha Wildner# often F6D6 in gt5000r.icm, F6B8 in kodakce.icm, F6CA in RSWOP.icm 171*614728caSSascha Wildner>>>>68 ubelong !0x0000f6d5 X=%#x 172c30bd091SSascha Wildner# usually Y=1.0~00010000h but Y=0 in brmsl07f.icm 173*614728caSSascha Wildner>>>>72 ubelong !0x00010000 Y=%#x 174c30bd091SSascha Wildner# usually Z~0.8249*65536=54060.6464~54061=D32Dh ; but also found 175c30bd091SSascha Wildner# D2F7 in hp1200c.icm, often D32C in A925A.icm, D309 in RSWOP.icm , D2F8 in kodak_dc.icm 176*614728caSSascha Wildner>>>>76 ubelong !0x0000d32d Z=%#x 177c30bd091SSascha Wildner# Profile ID. MD5 fingerprinting method as defined in Internet RFC 1321. 178*614728caSSascha Wildner>>>84 ubequad >0 \b, %#llx MD5 179c30bd091SSascha Wildner# reserved in older versions should be zero but also found CDCDCDCDCDCDCDCD 180*614728caSSascha Wildner#>>100 ubequad x \b %#llx reserved 181c30bd091SSascha Wildner# tag table 182c30bd091SSascha Wildner# 6 <= tags count <= 43 183c30bd091SSascha Wildner#>>>128 ubelong >43 \b, %u tags 184c30bd091SSascha Wildner>>>128 ubelong x 185c30bd091SSascha Wildner# shall contain the profileDescriptionTag "desc" , copyrightTag "cprt" 186c30bd091SSascha Wildner# search range = tags count * 12 -8=< maximal tag count * 12 -8= 43 * 12 -8= 508 187c30bd091SSascha Wildner>>>>132 search/508 cprt 188c30bd091SSascha Wildner# but no copyright tag in linearSRGB.icc 189c30bd091SSascha Wildner# beneath /System/Library/Frameworks/WebKit.framework/ 190c30bd091SSascha Wildner# Versions/A/Frameworks/WebCore.framework/Versions/A/Resources 191c30bd091SSascha Wildner>>>>132 default x \b, no copyright tag 192c30bd091SSascha Wildner# 1st tag 193c30bd091SSascha Wildner#>>>132 string x \b, 1st tag %.4s 194*614728caSSascha Wildner#>>>136 ubelong x %#x offset 195*614728caSSascha Wildner#>>>140 ubelong x %#x len 196c30bd091SSascha Wildner# 2nd tag,... 197c30bd091SSascha Wildner# look also for profileDescriptionTag "desc" 198c30bd091SSascha Wildner>>>132 search/508 desc 199c30bd091SSascha Wildner# look further for TextDescriptionType "desc" signature 200c30bd091SSascha Wildner>>>>(&0.L) string =desc 201c30bd091SSascha Wildner>>>>>&4 pstring/l x "%s" 202c30bd091SSascha Wildner# look alternative for multiLocalizedUnicodeType "mluc" signature like in VideoPAL.icc 203c30bd091SSascha Wildner>>>>(&0.L) string =mluc 204c30bd091SSascha Wildner>>>>>&(&8.L) ubequad x 205c30bd091SSascha Wildner>>>>>>&4 bestring16 x '%s' 206e8af9738SPeter Avalos 207e8af9738SPeter Avalos# Any other profile. 208e8af9738SPeter Avalos# XXX - should we use "acsp\0\0\0\0" for "no primary platform" profiles, 209e8af9738SPeter Avalos# and use "acsp" for everything else and dump the "primary platform" 210e8af9738SPeter Avalos# string in those cases? 211c30bd091SSascha Wildner36 string acsp 212c30bd091SSascha Wildner>0 use color-profile 213e8af9738SPeter Avalos 214e8af9738SPeter Avalos 215