public void Select(SemWeb.StatementSink sink) { FSpot.Tiff.Header exif = GetExifHeader(); if (exif != null) { exif.Select(sink); } XmpFile xmp = GetXmp(); if (xmp != null) { xmp.Select(sink); } string name = PhotoshopSignature.Name; JpegHeader.Marker marker = FindMarker(PhotoshopSignature); if (marker != null) { int len = name.Length; using (System.IO.Stream bimstream = new System.IO.MemoryStream(marker.Data, len, marker.Data.Length - len, false)) { FSpot.Bim.BimFile bim = new FSpot.Bim.BimFile(bimstream); bim.Select(sink); } } }
public void Dump() { #if enable_debug XmpFile xmp = new XmpFile(); xmp.Store = this; xmp.Save(System.Console.OpenStandardOutput()); #endif }
private void AddXmpProperties(JpegHeader header) { XmpFile xmp = header.GetXmp(); if (xmp != null) { AddXmpProperties(xmp); } }
public void SetXmp(XmpFile xmp) { using (MemoryStream stream = new MemoryStream()) { XmpSignature.WriteName(stream); xmp.Save(stream); Marker xmp_marker = new Marker(XmpSignature.Id, stream.ToArray()); Replace(XmpSignature, xmp_marker); } }
private void Setup() { // Arrange string firstImagePath = "C:\\Users\\Alessandro\\Pictures\\viaggio Erasmus - 5 - D\\DSC_0004.NEF"; if (File.Exists("C:\\Users\\Alessandro\\Pictures\\viaggio Erasmus -5 - D\\DSC_0004.xmp")) { File.Delete("C:\\Users\\Alessandro\\Pictures\\viaggio Erasmus -5 - D\\DSC_0004.xmp"); } file = new XmpFile(firstImagePath); }
public XmpFile GetXmp() { string name = XmpSignature.Name; Marker marker = FindMarker(XmpSignature); if (marker != null) { int len = name.Length; //System.Console.WriteLine (System.Text.Encoding.ASCII.GetString (marker.Data, len, // marker.Data.Length - len)); using (System.IO.Stream xmpstream = new System.IO.MemoryStream(marker.Data, len, marker.Data.Length - len, false)) { XmpFile xmp = new XmpFile(xmpstream); return(xmp); } } return(null); }
private void ExtractTextProperty(PngFile.TextChunk tchunk) { switch (tchunk.Keyword) { case "Title": AddProperty(Beagle.Property.New("dc:title", tchunk.Text)); break; case "Author": AddProperty(Beagle.Property.New("dc:creator", tchunk.Text)); break; case "Copyright": AddProperty(Beagle.Property.New("dc:rights", tchunk.Text)); break; case "Description": AddProperty(Beagle.Property.New("png:description", tchunk.Text)); break; case "Comment": AddProperty(Beagle.Property.New("png:comment", tchunk.Text)); break; case "XMP": case "XML:com.adobe.xmp": XmpFile xmp = new XmpFile(new MemoryStream(tchunk.TextData)); AddXmpProperties(xmp); break; case "Disclaimer": case "Warning": case "Source": case "Creation Time": case "Software": break; } }
public void SetXmp(XmpFile xmp) { this.xmp = xmp; }
internal static void AddTiffDirectoryProperties(FilterTiff filter, ImageDirectory directory) { foreach (DirectoryEntry e in directory.Entries) { switch (e.Id) { case TagId.ImageDescription: filter.AddProperty(Beagle.Property.New("exif:ImageDescription", e.ValueAsString [0])); break; case TagId.Model: filter.AddProperty(Beagle.Property.New("exif:Model", e.ValueAsString [0])); break; case TagId.UserComment: filter.AddProperty(Beagle.Property.New("exif:UserComment", e.ValueAsString [0])); break; case TagId.DateTimeOriginal: AddDateProperty(filter, "exif:DateTimeOriginal", e.ValueAsString [0]); break; case TagId.DateTimeDigitized: AddDateProperty(filter, "exif:DateTimeDigitized", e.ValueAsString [0]); break; case TagId.DateTime: AddDateProperty(filter, "exif:DateTime", e.ValueAsString [0]); break; case TagId.PixelXDimension: filter.Width = (int)e.ValueAsLong [0]; //filter.AddProperty (Beagle.Property.NewUnsearched ("exif:PixelXDimension", e.ValueAsString [0])); break; case TagId.PixelYDimension: filter.Height = (int)e.ValueAsLong [0]; //filter.AddProperty (Beagle.Property.NewUnsearched ("exif:PixelYDimension", e.ValueAsString [0])); break; case TagId.ImageWidth: uint wval = e.ValueAsLong [0]; if (filter.Width < wval) { filter.Width = (int)wval; } break; case TagId.ImageLength: uint hval = e.ValueAsLong [0]; if (filter.Height < hval) { filter.Height = (int)hval; } break; case TagId.ExposureTime: filter.AddProperty(Beagle.Property.NewUnsearched("exif:ExposureTime", e.ValueAsString [0])); break; case TagId.ISOSpeedRatings: filter.AddProperty(Beagle.Property.NewUnsearched("exif:ISOSpeedRatings", e.ValueAsString [0])); break; case TagId.FNumber: filter.AddProperty(Beagle.Property.NewUnsearched("exif:FNumber", Math.Round((e.RationalValue [0]).Value, 1))); break; case TagId.FocalLength: filter.AddProperty(Beagle.Property.NewUnsearched("exif:FocalLength", e.ValueAsString [0])); break; case TagId.Flash: ushort flash_val = e.ShortValue [0]; filter.AddProperty(Beagle.Property.NewBool("exif:Flash", (flash_val & 0x1) == 0x1)); break; case TagId.XMP: XmpFile xmp = new XmpFile(new System.IO.MemoryStream(e.RawData)); filter.AddXmpProperties(xmp); break; } } }
protected override void DoPullProperties() { // create new external process pc = new SafeProcess(); pc.Arguments = new string [] { "pdfinfo", "-meta", FileInfo.FullName }; pc.RedirectStandardOutput = true; // See FIXME below for why this is false. pc.RedirectStandardError = false; // Let pdfinfo run for at most 10 CPU seconds, and not // use more than 100 megs memory. pc.CpuLimit = 90; pc.MemLimit = 100 * 1024 * 1024; pc.UseLangC = true; try { pc.Start(); } catch (SafeProcessException e) { Log.Warn(e.Message); Error(); return; } // add pdfinfo's output to pool pout = new StreamReader(pc.StandardOutput); string str = null; int idx = -1; string strMetaTag = null; bool bKeyword = false; string prop = null; string val = null; while ((str = pout.ReadLine()) != null) { bKeyword = false; strMetaTag = null; idx = str.IndexOf(':'); if (idx > 0) { prop = str.Substring(0, idx); val = str.Substring(idx + 1); switch (prop) { case "Title": strMetaTag = "dc:title"; break; case "Author": strMetaTag = "dc:author"; break; case "Pages": strMetaTag = "fixme:page-count"; bKeyword = true; break; case "Creator": strMetaTag = "dc:creator"; break; case "Keywords": strMetaTag = "dc:keyword"; break; case "Producer": strMetaTag = "dc:appname"; break; case "Metadata": string xmpString = pout.ReadToEnd(); XmpFile xmp = new XmpFile(new MemoryStream(System.Text.Encoding.ASCII.GetBytes(xmpString))); AddXmpProperties(xmp); break; } if (strMetaTag != null) { if (bKeyword) { AddProperty(Beagle.Property.NewUnsearched(strMetaTag, val.Trim())); } else { AddProperty(Beagle.Property.New(strMetaTag, val.Trim())); } } } } pout.Close(); #if false // Log any errors or warnings from stderr pout = new StreamReader(pc.StandardError); while ((str = pout.ReadLine()) != null) { Log.Warn("pdfinfo [{0}]: {1}", Indexable.Uri, str); } pout.Close(); #endif pc.Close(); }
private void AddXmpProperties(XmpFile xmp) { Resource subject_anon = null; Resource creator_anon = null; Resource rights_anon = null; Resource title_anon = null; foreach (Statement stmt in (IEnumerable)xmp.Store) { if (stmt.Predicate == MetadataStore.Namespaces.Resolve("dc:subject")) { //Console.WriteLine ("found subject"); subject_anon = stmt.Object; } else if (stmt.Predicate == MetadataStore.Namespaces.Resolve("dc:creator")) { //Console.WriteLine ("found creator"); creator_anon = stmt.Object; } else if (stmt.Predicate == MetadataStore.Namespaces.Resolve("dc:rights")) { rights_anon = stmt.Object; } else if (stmt.Predicate == MetadataStore.Namespaces.Resolve("dc:title")) { if (stmt.Object is Literal) { AddProperty(Beagle.Property.New("dc:title", ((Literal)stmt.Object).Value)); } else if (stmt.Object is BNode) { title_anon = stmt.Object; } } else if (stmt.Predicate == MetadataStore.Namespaces.Resolve("cc:license")) { AddProperty(Beagle.Property.NewKeyword("fixme:license", ((Literal)stmt.Object).Value)); } } foreach (Statement stmt in (IEnumerable)xmp.Store) { if (stmt.Subject == subject_anon && stmt.Predicate != MetadataStore.Namespaces.Resolve("rdf:type")) { AddProperty(Beagle.Property.New("dc:subject", ((Literal)stmt.Object).Value)); } else if (stmt.Subject == creator_anon && stmt.Predicate != MetadataStore.Namespaces.Resolve("rdf:type")) { AddProperty(Beagle.Property.New("dc:creator", ((Literal)stmt.Object).Value)); } else if (stmt.Subject == rights_anon && stmt.Predicate != MetadataStore.Namespaces.Resolve("rdf:type")) { AddProperty(Beagle.Property.New("dc:rights", ((Literal)stmt.Object).Value)); } else if (stmt.Subject == title_anon && stmt.Predicate != MetadataStore.Namespaces.Resolve("rdf:type")) { AddProperty(Beagle.Property.New("dc:title", ((Literal)stmt.Object).Value)); } } }