C# 在Silverlight中读取和写入所有JPEG元数据

C# 在Silverlight中读取和写入所有JPEG元数据,c#,image,silverlight,metadata,exif,C#,Image,Silverlight,Metadata,Exif,我开发了一个Silverlight应用程序,需要在客户端压缩JPEG图像。我一直在使用一个名为的库来实现这个目标 然而,我遇到的最大问题之一是,该工具包要求您首先将JPEG转换为可写位图,该位图将删除与JPEG相关的所有元数据,如EXIF、XMP、JFIF等。我修改了FJCore库的源代码,以保留EXIF,压缩图像,然后重新连接EXIF数据。此过程可以工作,但会丢失其他类型的元数据信息 我不必实现保存和写入JPEG格式中存在的每种不同类型元数据的功能,而是寻找一种简化的方法,允许我提取所有元数据

我开发了一个Silverlight应用程序,需要在客户端压缩JPEG图像。我一直在使用一个名为的库来实现这个目标

然而,我遇到的最大问题之一是,该工具包要求您首先将JPEG转换为可写位图,该位图将删除与JPEG相关的所有元数据,如EXIF、XMP、JFIF等。我修改了FJCore库的源代码,以保留EXIF,压缩图像,然后重新连接EXIF数据。此过程可以工作,但会丢失其他类型的元数据信息

我不必实现保存和写入JPEG格式中存在的每种不同类型元数据的功能,而是寻找一种简化的方法,允许我提取所有元数据,无论其类型或格式如何,使用FJCore toolkit压缩/调整图像大小,然后重新附加以前保存的所有元数据。如果有一些指导或示例代码可以帮助我实现我的目标,我将不胜感激。请记住,这是一个Silverlight应用程序,因此这些.NET库是我必须使用的


谢谢。

您可以使用FJCore又名ImageTools来完成此操作。您只需在第212行添加以下内容:

// Exif.  Do something?
headers.Add(header);

并确保在调整大小时复制这些标题:

jpegOut = new DecodedJpeg(
    new ImageResizer(jpegIn.Image)
        .Resize(320, ResamplingFilters.NearestNeighbor),
    jpegIn.MetaHeaders); // Retain EXIF details

重新编译后,您就可以开始了。

您可以使用FJCore又名ImageTools来完成此操作。您只需在第212行添加以下内容:

// Exif.  Do something?
headers.Add(header);

并确保在调整大小时复制这些标题:

jpegOut = new DecodedJpeg(
    new ImageResizer(jpegIn.Image)
        .Resize(320, ResamplingFilters.NearestNeighbor),
    jpegIn.MetaHeaders); // Retain EXIF details

重新编译后,您应该可以开始了。

这正是我18个月前所做的。但是,是的,谢谢你为我更新这个问题。我可能应该自己做那件事。谢谢,太棒了!我现在正在GitHub上分叉这个库,并合并我的修复程序(我还有另一个)。希望每个人都能很快从这些修复中受益。GitHub fork有一个Nuget包这正是我18个月前做的事情。但是,是的,谢谢你为我更新这个问题。我可能应该自己做那件事。谢谢,太棒了!我现在正在GitHub上分叉这个库,并合并我的修复程序(我还有另一个)。希望每个人都能很快从这些修复中受益。GitHub fork有一个Nuget包