diff --git a/src/tags.cpp b/src/tags.cpp index f7e21b71..920ebffb 100644 --- a/src/tags.cpp +++ b/src/tags.cpp @@ -289,6 +289,13 @@ namespace Exiv2 { { 34892, N_("Linear Raw") } }; + //! Threshholding, tag 0x0107 + extern const TagDetails exifThreshholding[] = { + { 1, N_("No dithering or halftoning") }, + { 2, N_("Ordered dither or halftone technique") }, + { 3, N_("Randomized process") } + }; + //! Orientation, tag 0x0112 extern const TagDetails exifOrientation[] = { { 1, N_("top, left") }, @@ -307,6 +314,31 @@ namespace Exiv2 { { 2, N_("Horizontal differencing") } }; + //! InkSet, tag 0x014c + extern const TagDetails exifInkSet[] = { + { 1, N_("CMYK") }, + { 2, N_("not CMYK") } + }; + + //! SampleFormat, tag 0x0153 + extern const TagDetails exifSampleFormat[] = { + { 1, N_("Unsigned integer data") }, + { 2, N_("Two's complement signed integer data") }, + { 3, N_("IEEE floating point data") }, + { 4, N_("Undefined data format") } + }; + + //! exifJpegLosslessPredictor + extern const TagDetails exifJpegLosslessPredictor[] = { + { 1, N_("A") }, + { 2, N_("B") }, + { 3, N_("C") }, + { 4, N_("A+B-C") }, + { 5, N_("A+((B-C)/2)") }, + { 6, N_("B+((A-C)/2)") }, + { 7, N_("(A+B)/2") } + }; + //! YCbCrPositioning, tag 0x0213 extern const TagDetails exifYCbCrPositioning[] = { { 1, N_("Centered") }, @@ -391,6 +423,18 @@ namespace Exiv2 { N_("The pixel composition. In JPEG compressed data a JPEG " "marker is used instead of this tag."), ifd0Id, imgStruct, unsignedShort, EXV_PRINT_TAG(exifPhotometricInterpretation)), + TagInfo(0x0107, "Threshholding", N_("Threshholding"), + N_("For black and white TIFF files that represent shades of gray, " + "the technique used to convert from gray to black and white pixels."), + ifd0Id, imgStruct, unsignedShort, EXV_PRINT_TAG(exifThreshholding)), // TIFF tag + TagInfo(0x0108, "CellWidth", N_("Cell Width"), + N_("The width of the dithering or halftoning matrix used to create a " + "dithered or halftoned bilevel file."), + ifd0Id, imgStruct, unsignedShort, printValue), // TIFF tag + TagInfo(0x0109, "CellLength", N_("Cell Length"), + N_("The length of the dithering or halftoning matrix used to create a " + "dithered or halftoned bilevel file."), + ifd0Id, imgStruct, unsignedShort, printValue), // TIFF tag TagInfo(0x010a, "FillOrder", N_("Fill Order"), N_("The logical order of bits within a byte"), ifd0Id, imgStruct, unsignedShort, printValue), // TIFF tag @@ -544,6 +588,34 @@ namespace Exiv2 { TagInfo(0x014a, "SubIFDs", N_("SubIFD Offsets"), N_("Defined by Adobe Corporation to enable TIFF Trees within a TIFF file."), ifd0Id, tiffEp, unsignedLong, printValue), + TagInfo(0x014c, "InkSet", N_("Ink Set"), + N_("The set of inks used in a separated (PhotometricInterpretation=5) image."), + ifd0Id, imgStruct, unsignedShort, EXV_PRINT_TAG(exifInkSet)), // TIFF tag + TagInfo(0x014d, "InkNames", N_("Ink Names"), + N_("The name of each ink used in a separated (PhotometricInterpretation=5) image."), + ifd0Id, imgStruct, asciiString, printValue), // TIFF tag + TagInfo(0x014e, "NumberOfInks", N_("Number Of Inks"), + N_("The number of inks. Usually equal to SamplesPerPixel, unless there are extra samples."), + ifd0Id, imgStruct, unsignedShort, printValue), // TIFF tag + TagInfo(0x0150, "DotRange", N_("Dot Range"), + N_("The component values that correspond to a 0% dot and 100% dot."), + ifd0Id, imgStruct, unsignedByte, printValue), // TIFF tag + TagInfo(0x0151, "TargetPrinter", N_("Target Printer"), + N_("A description of the printing environment for which this separation is intended."), + ifd0Id, imgStruct, asciiString, printValue), // TIFF tag + TagInfo(0x0152, "ExtraSamples", N_("Extra Samples"), + N_("Specifies that each pixel has m extra components whose interpretation " + "is defined by one of the values listed below."), + ifd0Id, imgStruct, unsignedShort, printValue), // TIFF tag + TagInfo(0x0153, "SampleFormat", N_("Sample Format"), + N_("This field specifies how to interpret each data sample in a pixel."), + ifd0Id, imgStruct, unsignedShort, EXV_PRINT_TAG(exifSampleFormat)), // TIFF tag + TagInfo(0x0154, "SMinSampleValue", N_("SMin Sample Value"), + N_("This field specifies the minimum sample value."), + ifd0Id, imgStruct, unsignedShort, printValue), // TIFF tag + TagInfo(0x0155, "SMaxSampleValue", N_("SMax Sample Value"), + N_("This field specifies the maximum sample value."), + ifd0Id, imgStruct, unsignedShort, printValue), // TIFF tag TagInfo(0x0156, "TransferRange", N_("Transfer Range"), N_("Expands the range of the TransferFunction"), ifd0Id, imgCharacter, unsignedShort, printValue), // TIFF tag @@ -566,6 +638,29 @@ namespace Exiv2 { "not be recorded. Compressed thumbnails must be recorded in no " "more than 64 Kbytes, including all other data to be recorded in APP1."), ifd0Id, recOffset, unsignedLong, printValue), + TagInfo(0x0203, "JPEGRestartInterval", N_("JPEG Restart Interval"), + N_("This Field indicates the length of the restart interval used " + "in the compressed image data."), + ifd0Id, imgStruct, unsignedShort, printValue), // TIFF tag + TagInfo(0x0205, "JPEGLosslessPredictors", N_("JPEG Lossless Predictors"), + N_("This Field points to a list of lossless predictor-selection " + "values, one per component."), + ifd0Id, imgStruct, unsignedShort, EXV_PRINT_TAG(exifJpegLosslessPredictor)), // TIFF tag + TagInfo(0x0206, "JPEGPointTransforms", N_("JPEG Point Transforms"), + N_("This Field points to a list of point transform values, one per component."), + ifd0Id, imgStruct, unsignedShort, printValue), // TIFF tag + TagInfo(0x0207, "JPEGQTables", N_("JPEG Q-Tables"), + N_("This Field points to a list of offsets to the quantization tables, " + "one per component."), + ifd0Id, imgStruct, unsignedLong, printValue), // TIFF tag + TagInfo(0x0208, "JPEGDCTables", N_("JPEG DC-Tables"), + N_("This Field points to a list of offsets to the DC Huffman tables or " + "the lossless Huffman tables, one per component."), + ifd0Id, imgStruct, unsignedLong, printValue), // TIFF tag + TagInfo(0x0209, "JPEGACTables", N_("JPEG AC-Tables"), + N_("This Field points to a list of offsets to the Huffman AC tables, " + "one per component."), + ifd0Id, imgStruct, unsignedLong, printValue), // TIFF tag TagInfo(0x0211, "YCbCrCoefficients", N_("YCbCr Coefficients"), N_("The matrix coefficients for transformation from RGB to YCbCr " "image data. No default is given in TIFF; but here the " diff --git a/src/tiffimage.cpp b/src/tiffimage.cpp index 7940e53d..4b00fc7d 100644 --- a/src/tiffimage.cpp +++ b/src/tiffimage.cpp @@ -1028,6 +1028,8 @@ namespace Exiv2 { // IFD1 { 0x0111, Group::ifd1, newTiffThumbData<0x0117, Group::ifd1> }, { 0x0117, Group::ifd1, newTiffThumbSize<0x0111, Group::ifd1> }, + { 0x0144, Group::ifd1, newTiffImageData<0x0145, Group::ifd1> }, + { 0x0145, Group::ifd1, newTiffImageSize<0x0144, Group::ifd1> }, { 0x0201, Group::ifd1, newTiffThumbData<0x0202, Group::ifd1> }, { 0x0202, Group::ifd1, newTiffThumbSize<0x0201, Group::ifd1> }, { Tag::next, Group::ifd1, newTiffDirectory }, @@ -1036,6 +1038,8 @@ namespace Exiv2 { // IFD2 (eg, in Pentax PEF and Canon CR2 files) { 0x0111, Group::ifd2, newTiffImageData<0x0117, Group::ifd2> }, { 0x0117, Group::ifd2, newTiffImageSize<0x0111, Group::ifd2> }, + { 0x0144, Group::ifd1, newTiffImageData<0x0145, Group::ifd2> }, + { 0x0145, Group::ifd1, newTiffImageSize<0x0144, Group::ifd2> }, { 0x0201, Group::ifd2, newTiffImageData<0x0202, Group::ifd2> }, { 0x0202, Group::ifd2, newTiffImageSize<0x0201, Group::ifd2> }, { Tag::next, Group::ifd2, newTiffDirectory }, @@ -1044,6 +1048,8 @@ namespace Exiv2 { // IFD3 (eg, in Canon CR2 files) { 0x0111, Group::ifd3, newTiffImageData<0x0117, Group::ifd3> }, { 0x0117, Group::ifd3, newTiffImageSize<0x0111, Group::ifd3> }, + { 0x0144, Group::ifd1, newTiffImageData<0x0145, Group::ifd3> }, + { 0x0145, Group::ifd1, newTiffImageSize<0x0144, Group::ifd3> }, { 0x0201, Group::ifd3, newTiffImageData<0x0202, Group::ifd3> }, { 0x0202, Group::ifd3, newTiffImageSize<0x0201, Group::ifd3> }, { Tag::next, Group::ifd3, newTiffDirectory }, @@ -1676,35 +1682,29 @@ namespace Exiv2 { { 0x0143, Group::ifd0 }, // Exif.Image.TileLength { 0x0144, Group::ifd0 }, // Exif.Image.TileOffsets { 0x0145, Group::ifd0 }, // Exif.Image.TileByteCounts - { 0x014c, Group::ifd0 }, // Exif.Image.InkSet - - { 0x014d, Group::ifd0 }, // Exif.Image.InkNames - - { 0x014e, Group::ifd0 }, // Exif.Image.NumberOfInks - - { 0x0150, Group::ifd0 }, // Exif.Image.DotRange - - { 0x0151, Group::ifd0 }, // Exif.Image.TargetPrinter - - { 0x0152, Group::ifd0 }, // Exif.Image.ExtraSamples - - { 0x0153, Group::ifd0 }, // Exif.Image.SampleFormat - - { 0x0154, Group::ifd0 }, // Exif.Image.SMinSampleValue - - { 0x0155, Group::ifd0 }, // Exif.Image.SMaxSampleValue - + { 0x014c, Group::ifd0 }, // Exif.Image.InkSet + { 0x014d, Group::ifd0 }, // Exif.Image.InkNames + { 0x014e, Group::ifd0 }, // Exif.Image.NumberOfInks + { 0x0150, Group::ifd0 }, // Exif.Image.DotRange + { 0x0151, Group::ifd0 }, // Exif.Image.TargetPrinter + { 0x0152, Group::ifd0 }, // Exif.Image.ExtraSamples + { 0x0153, Group::ifd0 }, // Exif.Image.SampleFormat + { 0x0154, Group::ifd0 }, // Exif.Image.SMinSampleValue + { 0x0155, Group::ifd0 }, // Exif.Image.SMaxSampleValue { 0x0156, Group::ifd0 }, // Exif.Image.TransferRange { 0x0200, Group::ifd0 }, // Exif.Image.JPEGProc { 0x0201, Group::ifd0 }, // Exif.Image.JPEGInterchangeFormat { 0x0202, Group::ifd0 }, // Exif.Image.JPEGInterchangeFormatLength - { 0x0203, Group::ifd0 }, // Exif.Image.JPEGRestartInterval - - { 0x0205, Group::ifd0 }, // Exif.Image.JPEGLosslessPredictors - - { 0x0206, Group::ifd0 }, // Exif.Image.JPEGPointTransforms - - { 0x0207, Group::ifd0 }, // Exif.Image.JPEGQTables - - { 0x0208, Group::ifd0 }, // Exif.Image.JPEGDCTables - - { 0x0209, Group::ifd0 }, // Exif.Image.JPEGACTables - + { 0x0203, Group::ifd0 }, // Exif.Image.JPEGRestartInterval + { 0x0205, Group::ifd0 }, // Exif.Image.JPEGLosslessPredictors + { 0x0206, Group::ifd0 }, // Exif.Image.JPEGPointTransforms + { 0x0207, Group::ifd0 }, // Exif.Image.JPEGQTables + { 0x0208, Group::ifd0 }, // Exif.Image.JPEGDCTables + { 0x0209, Group::ifd0 }, // Exif.Image.JPEGACTables { 0x0211, Group::ifd0 }, // Exif.Image.YCbCrCoefficients { 0x0212, Group::ifd0 }, // Exif.Image.YCbCSubSampling { 0x0213, Group::ifd0 }, // Exif.Image.YCbCrPositioning { 0x0214, Group::ifd0 }, // Exif.Image.ReferenceBlackWhite - -/* other unknown TIFF tags (not image tags) - 107, Thresholding - - 108, CellWidth - - 109, CellLength - - */ }; if (!hasImageTags_) {