diff --git a/src/ImageSharp/MetaData/Profiles/ICC/IccDataType.cs b/src/ImageSharp/MetaData/Profiles/ICC/IccDataType.cs
new file mode 100644
index 0000000000..4296283291
--- /dev/null
+++ b/src/ImageSharp/MetaData/Profiles/ICC/IccDataType.cs
@@ -0,0 +1,86 @@
+//
+// Copyright (c) James Jackson-South and contributors.
+// Licensed under the Apache License, Version 2.0.
+//
+
+namespace ImageSharp
+{
+ ///
+ /// Enumerates the basic data types as defined in ICC.1:2010 version 4.3.0.0
+ /// Section 4.2 to 4.15
+ ///
+ public enum IccDataType
+ {
+ ///
+ /// A 12-byte value representation of the time and date
+ ///
+ DateTime,
+
+ ///
+ /// A single-precision 32-bit floating-point as specified in IEEE 754,
+ /// excluding un-normalized s, infinities, and not a "" (NaN) values
+ ///
+ Float32,
+
+ ///
+ /// Positions of some data elements are indicated using a position offset with the data element's size.
+ ///
+ Position,
+
+ ///
+ /// An 8-byte value, used to associate a normalized device code with a measurement value
+ ///
+ Response16,
+
+ ///
+ /// A fixed signed 4-byte (32-bit) quantity which has 16 fractional bits
+ ///
+ S15Fixed16,
+
+ ///
+ /// A fixed unsigned 4-byte (32-bit) quantity having 16 fractional bits
+ ///
+ U16Fixed16,
+
+ ///
+ /// A fixed unsigned 2-byte (16-bit) quantity having15 fractional bits
+ ///
+ U1Fixed15,
+
+ ///
+ /// A fixed unsigned 2-byte (16-bit) quantity having 8 fractional bits
+ ///
+ U8Fixed8,
+
+ ///
+ /// An unsigned 2-byte (16-bit) integer
+ ///
+ UInt16,
+
+ ///
+ /// An unsigned 4-byte (32-bit) integer
+ ///
+ UInt32,
+
+ ///
+ /// An unsigned 8-byte (64-bit) integer
+ ///
+ UInt64,
+
+ ///
+ /// An unsigned 1-byte (8-bit) integer
+ ///
+ UInt8,
+
+ ///
+ /// A set of three fixed signed 4-byte (32-bit) quantities used to encode CIEXYZ, nCIEXYZ, and PCSXYZ tristimulus values
+ ///
+ XYZ,
+
+ ///
+ /// Alpha-numeric values, and other input and output codes, shall conform to the American Standard Code for
+ /// Information Interchange (ASCII) specified in ISO/IEC 646.
+ ///
+ Ascii
+ }
+}
\ No newline at end of file
diff --git a/src/ImageSharp/MetaData/Profiles/ICC/IccProfileTag.cs b/src/ImageSharp/MetaData/Profiles/ICC/IccProfileTag.cs
new file mode 100644
index 0000000000..0075e863f5
--- /dev/null
+++ b/src/ImageSharp/MetaData/Profiles/ICC/IccProfileTag.cs
@@ -0,0 +1,358 @@
+//
+// Copyright (c) James Jackson-South and contributors.
+// Licensed under the Apache License, Version 2.0.
+//
+
+namespace ImageSharp
+{
+ ///
+ /// Enumerates the ICC Profile Tags as defined in ICC.1:2010 version 4.3.0.0
+ /// Section 9
+ ///
+ /// Each tag value represent the size of the tag in the profile.
+ ///
+ ///
+ public enum IccProfileTag
+ {
+ ///
+ /// A2B0 - This tag defines a colour transform from Device, Colour Encoding or PCS, to PCS, or a colour transform
+ /// from Device 1 to Device 2, using lookup table tag element structures
+ ///
+ AToB0 = 0x41324230,
+
+ ///
+ /// A2B2 - This tag describes the colour transform from Device or Colour Encoding to PCS using lookup table tag element structures
+ ///
+ AToB1 = 0x41324231,
+
+ ///
+ /// A2B2 - This tag describes the colour transform from Device or Colour Encoding to PCS using lookup table tag element structures
+ ///
+ AToB2 = 0x41324232,
+
+ ///
+ /// bXYZ - This tag contains the third column in the matrix used in matrix/TRC transforms.
+ ///
+ BlueMatrixColumn = 0x6258595A,
+
+ ///
+ /// bTRC - This tag contains the blue channel tone reproduction curve. The first element represents no colorant (white) or
+ /// phosphor (black) and the last element represents 100 % colorant (blue) or 100 % phosphor (blue).
+ ///
+ BlueTRC = 0x62545243,
+
+ ///
+ /// B2A0 - This tag defines a colour transform from PCS to Device or Colour Encoding using the lookup table tag element structures
+ ///
+ BToA0 = 0x42324130,
+
+ ///
+ /// B2A1 - This tag defines a colour transform from PCS to Device or Colour Encoding using the lookup table tag element structures.
+ ///
+ BToA1 = 0x42324131,
+
+ ///
+ /// B2A2 - This tag defines a colour transform from PCS to Device or Colour Encoding using the lookup table tag element structures.
+ ///
+ BToA2 = 0x42324132,
+
+ ///
+ /// B2D0 - This tag defines a colour transform from PCS to Device. It supports float32Number-encoded input range, output range and transform, and
+ /// provides a means to override the BToA0 tag.
+ ///
+ BToD0 = 0x42324430,
+
+ ///
+ /// B2D1 - This tag defines a colour transform from PCS to Device. It supports float32Number-encoded input range, output range and transform, and
+ /// provides a means to override the BToA1 tag.
+ ///
+ BToD1 = 0x42324431,
+
+ ///
+ /// B2D2 - This tag defines a colour transform from PCS to Device. It supports float32Number-encoded input range, output range and transform, and
+ /// provides a means to override the BToA2 tag.
+ ///
+ BToD2 = 0x42324432,
+
+ ///
+ /// B2D3 - This tag defines a colour transform from PCS to Device. It supports float32Number-encoded input range, output range and transform, and
+ /// provides a means to override the BToA1 tag.
+ ///
+ BToD3 = 0x42324433,
+
+ ///
+ /// calt - This tag contains the profile calibration date and time. This allows applications and utilities to verify if this profile matches a
+ /// vendor's profile and how recently calibration has been performed.
+ ///
+ CalibrationDateTime = 0x63616C74,
+
+ ///
+ /// targ - This tag contains the name of the registered characterization data set, or it contains the measurement
+ /// data for a characterization target.
+ ///
+ CharTarget = 0x74617267,
+
+ ///
+ /// chad - This tag contains a matrix, which shall be invertible, and which converts an nCIEXYZ colour, measured using the actual illumination
+ /// conditions and relative to the actual adopted white, to an nCIEXYZ colour relative to the PCS adopted white
+ ///
+ ChromaticAdaptation = 0x63686164,
+
+ ///
+ /// chrm - This tag contains the type and the data of the phosphor/colorant chromaticity set used.
+ ///
+ Chromaticity = 0x6368726D,
+
+ ///
+ /// clro - This tag specifies the laydown order of colorants.
+ ///
+ ColorantOrder = 0x636C726F,
+
+ ///
+ /// clrt
+ ///
+ ColorantTable = 0x636C7274,
+
+ ///
+ /// clot - This tag identifies the colorants used in the profile by a unique name and set of PCSXYZ or PCSLAB values.
+ /// When used in DeviceLink profiles only the PCSLAB values shall be permitted.
+ ///
+ ColorantTableOut = 0x636C6F74,
+
+ ///
+ /// ciis - This tag indicates the image state of PCS colorimetry produced using the colorimetric intent transforms.
+ ///
+ ColorimetricIntentImageStat = 0x63696973,
+
+ ///
+ /// cprt - This tag contains the text copyright information for the profile.
+ ///
+ Copyright = 0x63707274,
+
+ ///
+ /// crdi - Removed in V4
+ ///
+ CrdInfo = 0x63726469,
+
+ ///
+ /// data - Removed in V4
+ ///
+ Data = 0x64617461,
+
+ ///
+ /// dtim - Removed in V4
+ ///
+ DateTime = 0x6474696D,
+
+ ///
+ /// dmnd - This tag describes the structure containing invariant and localizable
+ /// versions of the device manufacturer for display
+ ///
+ DeviceMfgDesc = 0x646D6E64,
+
+ ///
+ /// dmdd - This tag describes the structure containing invariant and localizable
+ /// versions of the device model for display.
+ ///
+ DeviceModelDesc = 0x646D6464,
+
+ ///
+ /// devs - Removed in V4
+ ///
+ DeviceSettings = 0x64657673,
+
+ ///
+ /// D2B0 - This tag defines a colour transform from Device to PCS. It supports float32Number-encoded
+ /// input range, output range and transform, and provides a means to override the AToB0 tag
+ ///
+ DToB0 = 0x44324230,
+
+ ///
+ /// D2B1 - This tag defines a colour transform from Device to PCS. It supports float32Number-encoded
+ /// input range, output range and transform, and provides a means to override the AToB1 tag
+ ///
+ DToB1 = 0x44324230,
+
+ ///
+ /// D2B2 - This tag defines a colour transform from Device to PCS. It supports float32Number-encoded
+ /// input range, output range and transform, and provides a means to override the AToB1 tag
+ ///
+ DToB2 = 0x44324230,
+
+ ///
+ /// D2B3 - This tag defines a colour transform from Device to PCS. It supports float32Number-encoded
+ /// input range, output range and transform, and provides a means to override the AToB1 tag
+ ///
+ DToB3 = 0x44324230,
+
+ ///
+ /// gamt - This tag provides a table in which PCS values are the input and a single
+ /// output value for each input value is the output. If the output value is 0, the PCS colour is in-gamut.
+ /// If the output is non-zero, the PCS colour is out-of-gamut
+ ///
+ Gamut = 0x67616D74,
+
+ ///
+ /// kTRC - This tag contains the grey tone reproduction curve. The tone reproduction curve provides the necessary
+ /// information to convert between a single device channel and the PCSXYZ or PCSLAB encoding.
+ ///
+ GrayTRC = 0x6b545243,
+
+ ///
+ /// gXYZ - This tag contains the second column in the matrix, which is used in matrix/TRC transforms.
+ ///
+ GreenMatrixColumn = 0x6758595A,
+
+ ///
+ /// gTRC - This tag contains the green channel tone reproduction curve. The first element represents no
+ /// colorant (white) or phosphor (black) and the last element represents 100 % colorant (green) or 100 % phosphor (green).
+ ///
+ GreenTRC = 0x67545243,
+
+ ///
+ /// lumi - This tag contains the absolute luminance of emissive devices in candelas per square metre as described by the Y channel.
+ ///
+ Luminance = 0x6C756d69,
+
+ ///
+ /// meas - This tag describes the alternative measurement specification, such as a D65 illuminant instead of the default D50.
+ ///
+ Measurement = 0x6D656173,
+
+ ///
+ /// bkpt - Removed in V4
+ ///
+ MediaBlackPoint = 0x626B7074,
+
+ ///
+ /// wtpt - This tag, which is used for generating the ICC-absolute colorimetric intent, specifies the chromatically
+ /// adapted nCIEXYZ tristimulus values of the media white point.
+ ///
+ MediaWhitePoint = 0x77747074,
+
+ ///
+ /// ncol - OBSOLETE, use ncl2
+ ///
+ NamedColor = 0x6E636f6C,
+
+ ///
+ /// ncl2 - This tag contains the named colour information providing a PCS and optional device representation
+ /// for a list of named colours.
+ ///
+ NamedColor2 = 0x6E636C32,
+
+ ///
+ /// resp - This tag describes the structure containing a description of the device response for which the profile is intended.
+ ///
+ OutputResponse = 0x72657370,
+
+ ///
+ /// rig0 - There is only one standard reference medium gamut, as defined in ISO 12640-3
+ ///
+ PerceptualRenderingIntentGamut = 0x72696730, /* 'rig0' */
+
+ ///
+ /// pre0 - This tag contains the preview transformation from PCS to device space and back to the PCS.
+ ///
+ Preview0 = 0x70726530,
+
+ ///
+ /// pre1 - This tag defines the preview transformation from PCS to device space and back to the PCS.
+ ///
+ Preview1 = 0x70726531,
+
+ ///
+ /// pre2 - This tag contains the preview transformation from PCS to device space and back to the PCS.
+ ///
+ Preview2 = 0x70726532,
+
+ ///
+ /// desc - This tag describes the structure containing invariant and localizable versions of the profile
+ /// description for display.
+ ///
+ ProfileDescription = 0x64657363,
+
+ ///
+ /// pseq - This tag describes the structure containing a description of the profile sequence from source to
+ /// destination, typically used with the DeviceLink profile.
+ ///
+ ProfileSequenceDesc = 0x70736571,
+
+ ///
+ /// psd0 - Removed in V4
+ ///
+ Ps2CRD0 = 0x70736430,
+
+ ///
+ /// psd1 - Removed in V4
+ ///
+ Ps2CRD1 = 0x70736431,
+
+ ///
+ /// psd2 - Removed in V4
+ ///
+ Ps2CRD2 = 0x70736432,
+
+ ///
+ /// psd3 - Removed in V4
+ ///
+ Ps2CRD3 = 0x70736433,
+
+ ///
+ /// ps2s - Removed in V4
+ ///
+ Ps2CSA = 0x70733273,
+
+ ///
+ /// psd2i- Removed in V4
+ ///
+ Ps2RenderingIntent = 0x70733269,
+
+ ///
+ /// rXYZ - This tag contains the first column in the matrix, which is used in matrix/TRC transforms.
+ ///
+ RedMatrixColumn = 0x7258595A,
+
+ ///
+ /// This tag contains the red channel tone reproduction curve. The first element represents no colorant
+ /// (white) or phosphor (black) and the last element represents 100 % colorant (red) or 100 % phosphor (red).
+ ///
+ RedTRC = 0x72545243,
+
+ ///
+ /// rig2 - There is only one standard reference medium gamut, as defined in ISO 12640-3.
+ ///
+ SaturationRenderingIntentGamut = 0x72696732,
+
+ ///
+ /// scrd - Removed in V4
+ ///
+ ScreeningDesc = 0x73637264,
+
+ ///
+ /// scrn - Removed in V4
+ ///
+ Screening = 0x7363726E,
+
+ ///
+ /// tech - The device technology signature
+ ///
+ Technology = 0x74656368,
+
+ ///
+ /// bfd - Removed in V4
+ ///
+ UcrBg = 0x62666420,
+
+ ///
+ /// vued - This tag describes the structure containing invariant and localizable
+ /// versions of the viewing conditions.
+ ///
+ ViewingCondDesc = 0x76756564,
+
+ ///
+ /// view - This tag defines the viewing conditions parameters
+ ///
+ ViewingConditions = 0x76696577,
+ }
+}