public virtual void TestToString() { Com.Drew.Metadata.Directory directory = new ExifIFD0Directory(); Sharpen.Tests.AreEqual("Exif IFD0 Directory (0 tags)", Sharpen.Extensions.ConvertToString(directory)); directory.SetString(1, "Tag 1"); Sharpen.Tests.AreEqual("Exif IFD0 Directory (1 tag)", Sharpen.Extensions.ConvertToString(directory)); directory.SetString(2, "Tag 2"); Sharpen.Tests.AreEqual("Exif IFD0 Directory (2 tags)", Sharpen.Extensions.ConvertToString(directory)); }
internal Row(MarkdownTableOutputHandler _enclosing, [NotNull] FilePath file, [NotNull] Com.Drew.Metadata.Metadata metadata, [NotNull] string relativePath) { this._enclosing = _enclosing; this.file = file; this.metadata = metadata; this.relativePath = relativePath; ExifIFD0Directory ifd0Dir = metadata.GetFirstDirectoryOfType <ExifIFD0Directory>(); ExifSubIFDDirectory subIfdDir = metadata.GetFirstDirectoryOfType <ExifSubIFDDirectory>(); ExifThumbnailDirectory thumbDir = metadata.GetFirstDirectoryOfType <ExifThumbnailDirectory>(); if (ifd0Dir != null) { this.manufacturer = ifd0Dir.GetDescription(ExifIFD0Directory.TagMake); this.model = ifd0Dir.GetDescription(ExifIFD0Directory.TagModel); } bool hasMakernoteData = false; if (subIfdDir != null) { this.exifVersion = subIfdDir.GetDescription(ExifSubIFDDirectory.TagExifVersion); hasMakernoteData = subIfdDir.ContainsTag(ExifSubIFDDirectory.TagMakernote); } if (thumbDir != null) { int?width = thumbDir.GetInteger(ExifThumbnailDirectory.TagImageWidth); int?height = thumbDir.GetInteger(ExifThumbnailDirectory.TagImageHeight); this.thumbnail = width != null && height != null?Sharpen.Extensions.StringFormat("Yes (%s x %s)", width, height) : "Yes"; } foreach (Com.Drew.Metadata.Directory directory in metadata.GetDirectories()) { if (directory.GetType().FullName.Contains("Makernote")) { this.makernote = Sharpen.Extensions.Trim(directory.GetName().Replace("Makernote", string.Empty)); } } if (this.makernote == null) { this.makernote = hasMakernoteData ? "(Unknown)" : "N/A"; } }
/// <summary>An application entry point.</summary> /// <remarks> /// An application entry point. Takes the name of one or more files as arguments and prints the contents of all /// metadata directories to <code>System.out</code>. /// <p/> /// If <code>-thumb</code> is passed, then any thumbnail data will be written to a file with name of the /// input file having <code>.thumb.jpg</code> appended. /// <p/> /// If <code>-wiki</code> is passed, then output will be in a format suitable for Google Code's wiki. /// <p/> /// If <code>-hex</code> is passed, then the ID of each tag will be displayed in hexadecimal. /// </remarks> /// <param name="args">the command line arguments</param> /// <exception cref="Com.Drew.Metadata.MetadataException"/> /// <exception cref="System.IO.IOException"/> public static void Main(string[] args) { ICollection <string> argList = new AList <string>(Arrays.AsList(args)); bool thumbRequested = argList.Remove("-thumb"); bool wikiFormat = argList.Remove("-wiki"); bool showHex = argList.Remove("-hex"); if (argList.Count < 1) { string version = typeof(Com.Drew.Imaging.ImageMetadataReader).Assembly.GetImplementationVersion(); System.Console.Out.Println("metadata-extractor version " + version); System.Console.Out.Println(); System.Console.Out.Println(Sharpen.Extensions.StringFormat("Usage: java -jar metadata-extractor-%s.jar <filename> [<filename>] [-thumb] [-wiki] [-hex]", version == null ? "a.b.c" : version)); System.Environment.Exit(1); } foreach (string filePath in argList) { long startTime = Runtime.NanoTime(); FilePath file = new FilePath(filePath); if (!wikiFormat && argList.Count > 1) { System.Console.Out.Printf("\n***** PROCESSING: %s\n%n", filePath); } Com.Drew.Metadata.Metadata metadata = null; try { metadata = Com.Drew.Imaging.ImageMetadataReader.ReadMetadata(file); } catch (Exception e) { Sharpen.Runtime.PrintStackTrace(e, System.Console.Error); System.Environment.Exit(1); } long took = Runtime.NanoTime() - startTime; if (!wikiFormat) { System.Console.Out.Printf("Processed %.3f MB file in %.2f ms%n%n", file.Length() / (1024d * 1024), took / 1000000d); } if (wikiFormat) { string fileName = file.GetName(); string urlName = StringUtil.UrlEncode(fileName); ExifIFD0Directory exifIFD0Directory = metadata.GetDirectory <ExifIFD0Directory>(); string make = exifIFD0Directory == null ? string.Empty : StringUtil.EscapeForWiki(exifIFD0Directory.GetString(ExifIFD0Directory.TagMake)); string model = exifIFD0Directory == null ? string.Empty : StringUtil.EscapeForWiki(exifIFD0Directory.GetString(ExifIFD0Directory.TagModel)); System.Console.Out.Println(); System.Console.Out.Println("-----"); System.Console.Out.Println(); System.Console.Out.Printf("= %s - %s =%n", make, model); System.Console.Out.Println(); System.Console.Out.Printf("<a href=\"http://sample-images.metadata-extractor.googlecode.com/git/%s\">%n", urlName); System.Console.Out.Printf("<img src=\"http://sample-images.metadata-extractor.googlecode.com/git/%s\" width=\"300\"/><br/>%n", urlName); System.Console.Out.Println(StringUtil.EscapeForWiki(fileName)); System.Console.Out.Println("</a>"); System.Console.Out.Println(); System.Console.Out.Println("|| *Directory* || *Tag Id* || *Tag Name* || *Extracted Value* ||"); } // iterate over the metadata and print to System.out foreach (Com.Drew.Metadata.Directory directory in metadata.GetDirectories()) { string directoryName = directory.GetName(); foreach (Tag tag in directory.GetTags()) { string tagName = tag.GetTagName(); string description = tag.GetDescription(); // truncate the description if it's too long if (description != null && description.Length > 1024) { description = Sharpen.Runtime.Substring(description, 0, 1024) + "..."; } if (wikiFormat) { System.Console.Out.Printf("||%s||0x%s||%s||%s||%n", StringUtil.EscapeForWiki(directoryName), Sharpen.Extensions.ToHexString(tag.GetTagType()), StringUtil.EscapeForWiki(tagName), StringUtil.EscapeForWiki(description)); } else { if (showHex) { System.Console.Out.Printf("[%s - %s] %s = %s%n", directoryName, tag.GetTagTypeHex(), tagName, description); } else { System.Console.Out.Printf("[%s] %s = %s%n", directoryName, tagName, description); } } } // print out any errors foreach (string error in directory.GetErrors()) { System.Console.Error.Println("ERROR: " + error); } } if (args.Length > 1 && thumbRequested) { ExifThumbnailDirectory directory_1 = metadata.GetDirectory <ExifThumbnailDirectory>(); if (directory_1 != null && directory_1.HasThumbnailData()) { System.Console.Out.Println("Writing thumbnail..."); directory_1.WriteThumbnail(Sharpen.Extensions.Trim(args[0]) + ".thumb.jpg"); } else { System.Console.Out.Println("No thumbnail data exists in this image"); } } } }