是否有可能使用C#和.NET Framework 2读取图片的IPTC信息?
我还没有找到任何解决方案。只有.NET Framework 3.0或.NET 3.5才能实现。
任何帮助,任何信息?
非常感谢德国! 斯蒂芬
答案 0 :(得分:3)
好的,我之前的回答有点'困惑'。以下是.NET 2.0项目(Visual Studio 2008 SLN格式)的链接,该项目提供了一些基本的“提取”功能MetaExtractor ZIP (25Kb)
CODE SNIP:
// The Parser class extracts the data to hardcoded properties.
// it's 1200 lines - too many to post on StackOverflow
JpegParser parser = new JpegParser(path);
if (parser.ParseDocument())
{
Console.WriteLine("Parsed {0} {1}", System.IO.Path.GetFileName(path), parser.Title);
Console.WriteLine("Tags: {0}", parser.KeywordString);
Console.WriteLine("Description: {0}", parser.Description);
Console.WriteLine("Title: {0}", parser.Title);
Console.WriteLine("Rating: {0}", parser.Rating);
}
用法:
MetaExtractor "C:\Users\Craig\Pictures\anton-1.jpg"
输出:
== DeepZoomPublisher MetaExtractor v0.1 ==
Parsed anton-1.jpg Beach Photo
Tags: beach, blue sky
Description: Anton
Title: Beach Photo
Rating: 3
Press any key to exit...
希望这比我以前的答案更有帮助。
答案 1 :(得分:2)
我意识到这个答案并没有解决.NET framework v2,但我认为值得记录的是那些使用.NET 3.5或更高版本的人。这可能也适用于3.0,但我没有在那里测试过。
以下函数调用将返回JPEG图像中嵌入的关键字:
private string[] GetKeywords(string filespec)
{
BitmapDecoder decoder = new JpegBitmapDecoder(new FileStream(filespec, FileMode.Open), BitmapCreateOptions.None, BitmapCacheOption.None);
BitmapMetadata meta = (BitmapMetadata)decoder.Frames[0].Metadata;
return meta.Keywords.ToArray<string>();
}
BitmapDecoder和BitmapMetadata类包含在WPF中通常使用的程序集中,因此您需要引用以下程序集来使用这些类:
我在WinForm应用程序中成功使用此方法,但我怀疑它可以适用于其他应用程序类型。此外,您可以看到此示例中的抽象“BitmapDecoder”类被分配了一个JpegBitmapDecoder实例,但您可以获得另一个解码器的实例,用于您的图像类型(也支持TIFF,GIF,PNG,BMP和WMP)。
答案 2 :(得分:1)
斯蒂芬,
这两个链接应该是有用的
Reading XMP metadata from JPEG
EXIF extractor (on CodeProject)
它们都访问JPEG标头的略微不同的部分,以提取可嵌入的各种元数据。我在Searcharoo (which you can download)中使用了他们的代码,并从此DeepZoom example的JPEG中提取纬度/经度。
您可以从此13kb code ZIP抓取我的JpegParser.cs
课程 - 它只会抓取几个属性(标题/说明/关键字/评级/纬度 - 经度),但您应该能够看到代码在哪里提取更多== SEE EDIT BELOW ==
注意:努力工作全部由上面链接的两篇文章的作者完成。
下面的 编辑评论突出显示我上面引用的JpegParser.cs
包含对using System.Windows.Media.Imaging;
和BitmapImage img = new BitmapImage(new Uri(filename));
的引用的表情。这些是作为(未完成的)增强的一部分添加的,因此可以安全地删除它们,然后JpegParser.cs
类应该在2.0中运行(尽管包含的项目不会 - 抱歉混淆)。
或者,您可以从JpegDocument.cs中的Searcharoo类获取类似代码(需要进行一些编辑) - 一个对文件(包括JPEG)进行索引的.NET 2.0应用程序,例如search result }
答案 3 :(得分:1)
我刚刚搜索了整个网络,找到了一个提取IPTC信息的C#解决方案,并在Code Project中找到了这个很好的全新教程:
http://www.codeproject.com/KB/graphics/ReadingIPTCAPP14.aspx
希望它有所帮助。 :)
答案 4 :(得分:0)
如果它是在3.x中实现的,则它在早期版本中不存在。
然而,有第三方库可以做到这一点。 ImageMagick就是其中之一。如果您正在寻找更简单(且免费)的实施方式,此article或Google搜索可能会引导您找到解决方案。
祝你好运。
答案 5 :(得分:0)
从这里和其他地方尝试了几个没有运气的建议,我已经决定编写一个类来调用exiv2命令行工具。在我的场景中,为每个图像生成一个进程的性能损失是可以接受的,它可能不在其他图像中。