示例#1
0
    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);
            }
        }
    }
示例#2
0
        public void Dump()
        {
#if enable_debug
            XmpFile xmp = new XmpFile();
            xmp.Store = this;
            xmp.Save(System.Console.OpenStandardOutput());
#endif
        }
示例#3
0
        private void AddXmpProperties(JpegHeader header)
        {
            XmpFile xmp = header.GetXmp();

            if (xmp != null)
            {
                AddXmpProperties(xmp);
            }
        }
示例#4
0
    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);
        }
示例#6
0
    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);
    }
示例#7
0
        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;
            }
        }
示例#8
0
 public void SetXmp(XmpFile xmp)
 {
     this.xmp = xmp;
 }
示例#9
0
        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;
                }
            }
        }
示例#10
0
        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();
        }
示例#11
0
        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));
                }
            }
        }