Esempio n. 1
0
 protected virtual void ExtractMetadata(TagLib.Image.File metadata)
 {
     if (metadata != null)
     {
         Orientation = metadata.ImageTag.Orientation;
     }
 }
Esempio n. 2
0
        public void ValidateMetadataInvariants(TagLib.Image.File file)
        {
            Assert.IsNotNull(file);

            // This file doesn't have an orientation tag, we had a bug that causes
            // an exception when looking it up. Test it here.
            Assert.AreEqual(ImageOrientation.None, file.ImageTag.Orientation);

            //  ---------- Start of IFD tests ----------

            var tag = file.GetTag(TagTypes.TiffIFD) as IFDTag;

            Assert.IsNotNull(tag, "IFD tag not found");

            var structure = tag.Structure;

            // Image.0x010F (Make/Ascii/6) "Canon"
            {
                var entry = structure.GetEntry(0, (ushort)IFDEntryTag.Make);
                Assert.IsNotNull(entry, "Entry 0x010F missing in IFD 0");
                Assert.IsNotNull(entry as StringIFDEntry, "Entry is not a string!");
                Assert.AreEqual("Canon", (entry as StringIFDEntry).Value);
            }
            // Image.0x0110 (Model/Ascii/15) "Canon EOS 450D"
            {
                var entry = structure.GetEntry(0, (ushort)IFDEntryTag.Model);
                Assert.IsNotNull(entry, "Entry 0x0110 missing in IFD 0");
                Assert.IsNotNull(entry as StringIFDEntry, "Entry is not a string!");
                Assert.AreEqual("Canon EOS 450D", (entry as StringIFDEntry).Value);
            }
            // Image.0x011A (XResolution/Rational/1) "300/1"
            {
                var entry = structure.GetEntry(0, (ushort)IFDEntryTag.XResolution);
                Assert.IsNotNull(entry, "Entry 0x011A missing in IFD 0");
                Assert.IsNotNull(entry as RationalIFDEntry, "Entry is not a rational!");
                Assert.AreEqual(300, (entry as RationalIFDEntry).Value.Numerator);
                Assert.AreEqual(1, (entry as RationalIFDEntry).Value.Denominator);
            }
            // Image.0x011B (YResolution/Rational/1) "300/1"
            {
                var entry = structure.GetEntry(0, (ushort)IFDEntryTag.YResolution);
                Assert.IsNotNull(entry, "Entry 0x011B missing in IFD 0");
                Assert.IsNotNull(entry as RationalIFDEntry, "Entry is not a rational!");
                Assert.AreEqual(300, (entry as RationalIFDEntry).Value.Numerator);
                Assert.AreEqual(1, (entry as RationalIFDEntry).Value.Denominator);
            }
            // Image.0x0128 (ResolutionUnit/Short/1) "2"
            {
                var entry = structure.GetEntry(0, (ushort)IFDEntryTag.ResolutionUnit);
                Assert.IsNotNull(entry, "Entry 0x0128 missing in IFD 0");
                Assert.IsNotNull(entry as ShortIFDEntry, "Entry is not a short!");
                Assert.AreEqual(2, (entry as ShortIFDEntry).Value);
            }
            // Image.0x0132 (DateTime/Ascii/20) "2010:02:08 11:37:33"
            {
                var entry = structure.GetEntry(0, (ushort)IFDEntryTag.DateTime);
                Assert.IsNotNull(entry, "Entry 0x0132 missing in IFD 0");
                Assert.IsNotNull(entry as StringIFDEntry, "Entry is not a string!");
                Assert.AreEqual("2010:02:08 11:37:33", (entry as StringIFDEntry).Value);
            }
            // Image.0x013B (Artist/Ascii/17) "Ruben Vermeersch"
            {
                var entry = structure.GetEntry(0, (ushort)IFDEntryTag.Artist);
                Assert.IsNotNull(entry, "Entry 0x013B missing in IFD 0");
                Assert.IsNotNull(entry as StringIFDEntry, "Entry is not a string!");
                Assert.AreEqual("Ruben Vermeersch", (entry as StringIFDEntry).Value);
            }
            // Image.0x8769 (ExifTag/SubIFD/1) "186"
            {
                var entry = structure.GetEntry(0, (ushort)IFDEntryTag.ExifIFD);
                Assert.IsNotNull(entry, "Entry 0x8769 missing in IFD 0");
                Assert.IsNotNull(entry as SubIFDEntry, "Entry is not a sub IFD!");
            }

            var exif = structure.GetEntry(0, (ushort)IFDEntryTag.ExifIFD) as SubIFDEntry;

            Assert.IsNotNull(exif, "Exif tag not found");
            var exif_structure = exif.Structure;

            // Photo.0x829A (ExposureTime/Rational/1) "1/60"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.ExposureTime);
                Assert.IsNotNull(entry, "Entry 0x829A missing in IFD 0");
                Assert.IsNotNull(entry as RationalIFDEntry, "Entry is not a rational!");
                Assert.AreEqual(1, (entry as RationalIFDEntry).Value.Numerator);
                Assert.AreEqual(60, (entry as RationalIFDEntry).Value.Denominator);
            }
            // Photo.0x829D (FNumber/Rational/1) "32/10"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.FNumber);
                Assert.IsNotNull(entry, "Entry 0x829D missing in IFD 0");
                Assert.IsNotNull(entry as RationalIFDEntry, "Entry is not a rational!");
                Assert.AreEqual(32, (entry as RationalIFDEntry).Value.Numerator);
                Assert.AreEqual(10, (entry as RationalIFDEntry).Value.Denominator);
            }
            // Photo.0x8822 (ExposureProgram/Short/1) "3"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.ExposureProgram);
                Assert.IsNotNull(entry, "Entry 0x8822 missing in IFD 0");
                Assert.IsNotNull(entry as ShortIFDEntry, "Entry is not a short!");
                Assert.AreEqual(3, (entry as ShortIFDEntry).Value);
            }
            // Photo.0x8827 (ISOSpeedRatings/Short/1) "1600"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.ISOSpeedRatings);
                Assert.IsNotNull(entry, "Entry 0x8827 missing in IFD 0");
                Assert.IsNotNull(entry as ShortIFDEntry, "Entry is not a short!");
                Assert.AreEqual(1600, (entry as ShortIFDEntry).Value);
            }
            // Photo.0x9000 (ExifVersion/Undefined/4) "48 50 50 49 "
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.ExifVersion);
                Assert.IsNotNull(entry, "Entry 0x9000 missing in IFD 0");
                Assert.IsNotNull(entry as UndefinedIFDEntry, "Entry is not an undefined IFD entry!");
                var bytes        = new byte[] { 48, 50, 50, 49 };
                var parsed_bytes = (entry as UndefinedIFDEntry).Data.Data;
                Assert.AreEqual(bytes, parsed_bytes);
            }
            // Photo.0x9003 (DateTimeOriginal/Ascii/20) "2010:02:06 10:57:22"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.DateTimeOriginal);
                Assert.IsNotNull(entry, "Entry 0x9003 missing in IFD 0");
                Assert.IsNotNull(entry as StringIFDEntry, "Entry is not a string!");
                Assert.AreEqual("2010:02:06 10:57:22", (entry as StringIFDEntry).Value);
            }
            // Photo.0x9004 (DateTimeDigitized/Ascii/20) "2010:02:06 10:57:22"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.DateTimeDigitized);
                Assert.IsNotNull(entry, "Entry 0x9004 missing in IFD 0");
                Assert.IsNotNull(entry as StringIFDEntry, "Entry is not a string!");
                Assert.AreEqual("2010:02:06 10:57:22", (entry as StringIFDEntry).Value);
            }
            // Photo.0x9201 (ShutterSpeedValue/SRational/1) "5906891/1000000"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.ShutterSpeedValue);
                Assert.IsNotNull(entry, "Entry 0x9201 missing in IFD 0");
                Assert.IsNotNull(entry as SRationalIFDEntry, "Entry is not a srational!");
                Assert.AreEqual(5906891, (entry as SRationalIFDEntry).Value.Numerator);
                Assert.AreEqual(1000000, (entry as SRationalIFDEntry).Value.Denominator);
            }
            // Photo.0x9202 (ApertureValue/Rational/1) "3356144/1000000"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.ApertureValue);
                Assert.IsNotNull(entry, "Entry 0x9202 missing in IFD 0");
                Assert.IsNotNull(entry as RationalIFDEntry, "Entry is not a rational!");
                Assert.AreEqual(3356144, (entry as RationalIFDEntry).Value.Numerator);
                Assert.AreEqual(1000000, (entry as RationalIFDEntry).Value.Denominator);
            }
            // Photo.0x9204 (ExposureBiasValue/SRational/1) "0/1"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.ExposureBiasValue);
                Assert.IsNotNull(entry, "Entry 0x9204 missing in IFD 0");
                Assert.IsNotNull(entry as SRationalIFDEntry, "Entry is not a srational!");
                Assert.AreEqual(0, (entry as SRationalIFDEntry).Value.Numerator);
                Assert.AreEqual(1, (entry as SRationalIFDEntry).Value.Denominator);
            }
            // Photo.0x9205 (MaxApertureValue/Rational/1) "2/1"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.MaxApertureValue);
                Assert.IsNotNull(entry, "Entry 0x9205 missing in IFD 0");
                Assert.IsNotNull(entry as RationalIFDEntry, "Entry is not a rational!");
                Assert.AreEqual(2, (entry as RationalIFDEntry).Value.Numerator);
                Assert.AreEqual(1, (entry as RationalIFDEntry).Value.Denominator);
            }
            // Photo.0x9207 (MeteringMode/Short/1) "5"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.MeteringMode);
                Assert.IsNotNull(entry, "Entry 0x9207 missing in IFD 0");
                Assert.IsNotNull(entry as ShortIFDEntry, "Entry is not a short!");
                Assert.AreEqual(5, (entry as ShortIFDEntry).Value);
            }
            // Photo.0x9209 (Flash/Short/1) "16"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.Flash);
                Assert.IsNotNull(entry, "Entry 0x9209 missing in IFD 0");
                Assert.IsNotNull(entry as ShortIFDEntry, "Entry is not a short!");
                Assert.AreEqual(16, (entry as ShortIFDEntry).Value);
            }
            // Photo.0x920A (FocalLength/Rational/1) "35/1"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.FocalLength);
                Assert.IsNotNull(entry, "Entry 0x920A missing in IFD 0");
                Assert.IsNotNull(entry as RationalIFDEntry, "Entry is not a rational!");
                Assert.AreEqual(35, (entry as RationalIFDEntry).Value.Numerator);
                Assert.AreEqual(1, (entry as RationalIFDEntry).Value.Denominator);
            }
            // Photo.0x9291 (SubSecTimeOriginal/Ascii/3) "02"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.SubsecTimeOriginal);
                Assert.IsNotNull(entry, "Entry 0x9291 missing in IFD 0");
                Assert.IsNotNull(entry as StringIFDEntry, "Entry is not a string!");
                Assert.AreEqual("02", (entry as StringIFDEntry).Value);
            }
            // Photo.0x9292 (SubSecTimeDigitized/Ascii/3) "02"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.SubsecTimeDigitized);
                Assert.IsNotNull(entry, "Entry 0x9292 missing in IFD 0");
                Assert.IsNotNull(entry as StringIFDEntry, "Entry is not a string!");
                Assert.AreEqual("02", (entry as StringIFDEntry).Value);
            }
            // Photo.0xA20E (FocalPlaneXResolution/Rational/1) "4272000/878"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.FocalPlaneXResolution);
                Assert.IsNotNull(entry, "Entry 0xA20E missing in IFD 0");
                Assert.IsNotNull(entry as RationalIFDEntry, "Entry is not a rational!");
                Assert.AreEqual(4272000, (entry as RationalIFDEntry).Value.Numerator);
                Assert.AreEqual(878, (entry as RationalIFDEntry).Value.Denominator);
            }
            // Photo.0xA20F (FocalPlaneYResolution/Rational/1) "2848000/584"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.FocalPlaneYResolution);
                Assert.IsNotNull(entry, "Entry 0xA20F missing in IFD 0");
                Assert.IsNotNull(entry as RationalIFDEntry, "Entry is not a rational!");
                Assert.AreEqual(2848000, (entry as RationalIFDEntry).Value.Numerator);
                Assert.AreEqual(584, (entry as RationalIFDEntry).Value.Denominator);
            }
            // Photo.0xA210 (FocalPlaneResolutionUnit/Short/1) "2"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.FocalPlaneResolutionUnit);
                Assert.IsNotNull(entry, "Entry 0xA210 missing in IFD 0");
                Assert.IsNotNull(entry as ShortIFDEntry, "Entry is not a short!");
                Assert.AreEqual(2, (entry as ShortIFDEntry).Value);
            }
            // Photo.0xA401 (CustomRendered/Short/1) "0"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.CustomRendered);
                Assert.IsNotNull(entry, "Entry 0xA401 missing in IFD 0");
                Assert.IsNotNull(entry as ShortIFDEntry, "Entry is not a short!");
                Assert.AreEqual(0, (entry as ShortIFDEntry).Value);
            }
            // Photo.0xA402 (ExposureMode/Short/1) "0"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.ExposureMode);
                Assert.IsNotNull(entry, "Entry 0xA402 missing in IFD 0");
                Assert.IsNotNull(entry as ShortIFDEntry, "Entry is not a short!");
                Assert.AreEqual(0, (entry as ShortIFDEntry).Value);
            }
            // Photo.0xA403 (WhiteBalance/Short/1) "0"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.WhiteBalance);
                Assert.IsNotNull(entry, "Entry 0xA403 missing in IFD 0");
                Assert.IsNotNull(entry as ShortIFDEntry, "Entry is not a short!");
                Assert.AreEqual(0, (entry as ShortIFDEntry).Value);
            }
            // Photo.0xA406 (SceneCaptureType/Short/1) "0"
            {
                var entry = exif_structure.GetEntry(0, (ushort)ExifEntryTag.SceneCaptureType);
                Assert.IsNotNull(entry, "Entry 0xA406 missing in IFD 0");
                Assert.IsNotNull(entry as ShortIFDEntry, "Entry is not a short!");
                Assert.AreEqual(0, (entry as ShortIFDEntry).Value);
            }
            // Thumbnail.0x0103 (Compression/Short/1) "6"
            {
                var entry = structure.GetEntry(1, (ushort)IFDEntryTag.Compression);
                Assert.IsNotNull(entry, "Entry 0x0103 missing in IFD 1");
                Assert.IsNotNull(entry as ShortIFDEntry, "Entry is not a short!");
                Assert.AreEqual(6, (entry as ShortIFDEntry).Value);
            }
            // Thumbnail.0x011A (XResolution/Rational/1) "300/1"
            {
                var entry = structure.GetEntry(1, (ushort)IFDEntryTag.XResolution);
                Assert.IsNotNull(entry, "Entry 0x011A missing in IFD 1");
                Assert.IsNotNull(entry as RationalIFDEntry, "Entry is not a rational!");
                Assert.AreEqual(300, (entry as RationalIFDEntry).Value.Numerator);
                Assert.AreEqual(1, (entry as RationalIFDEntry).Value.Denominator);
            }
            // Thumbnail.0x011B (YResolution/Rational/1) "300/1"
            {
                var entry = structure.GetEntry(1, (ushort)IFDEntryTag.YResolution);
                Assert.IsNotNull(entry, "Entry 0x011B missing in IFD 1");
                Assert.IsNotNull(entry as RationalIFDEntry, "Entry is not a rational!");
                Assert.AreEqual(300, (entry as RationalIFDEntry).Value.Numerator);
                Assert.AreEqual(1, (entry as RationalIFDEntry).Value.Denominator);
            }
            // Thumbnail.0x0128 (ResolutionUnit/Short/1) "2"
            {
                var entry = structure.GetEntry(1, (ushort)IFDEntryTag.ResolutionUnit);
                Assert.IsNotNull(entry, "Entry 0x0128 missing in IFD 1");
                Assert.IsNotNull(entry as ShortIFDEntry, "Entry is not a short!");
                Assert.AreEqual(2, (entry as ShortIFDEntry).Value);
            }
            // Thumbnail.0x0201 (JPEGInterchangeFormat/ThumbnailDataIFD/1) "674"
            {
                var entry = structure.GetEntry(1, (ushort)IFDEntryTag.JPEGInterchangeFormat);
                Assert.IsNotNull(entry, "Entry 0x0201 missing in IFD 1");
                Assert.IsNotNull(entry as ThumbnailDataIFDEntry, "Entry is not a thumbnail IFD!");
            }
            // Thumbnail.0x0202 (JPEGInterchangeFormatLength/Long/1) "17036"
            {
                var entry = structure.GetEntry(1, (ushort)IFDEntryTag.JPEGInterchangeFormatLength);
                Assert.IsNotNull(entry, "Entry 0x0202 missing in IFD 1");
                Assert.IsNotNull(entry as LongIFDEntry, "Entry is not a long!");
                Assert.AreEqual(17036, (entry as LongIFDEntry).Value);
            }

            //  ---------- End of IFD tests ----------
        }
Esempio n. 3
0
 public void Init()
 {
     file = File.Create(sample_file) as Image.File;
 }