使用标记

一般信息

使用标记

处理标记

处理标记和注释

任务:确定一个特定的文件格式支持元数据

任务:阅读某个标签的ID或评论一个TIFF或EXIF文件

任务:写一个特定的标签或TIFF或EXIF文件置评

任务:阅读所有标签和评论中发现一个TIFF或EXIF文件没有加载的图像

任务:更新注释或标记在TIFF或EXIF文件加载图像

任务:自动加载所有的标签和评论中发现一个TIFF或EXIF文件时,文件被加载

任务:自动加载、更新、保存图像标记

任务:从文件中删除一个标签的ID没有加载它

任务:读或写文件盖章

一般信息

“元数据”是指额外的信息存储在一个图像,但没有必要解码图像。它可以包含信息所使用的摄像机图像,作者,照片拍摄的日期和时间,这张照片在哪里拍的,相机是否有GPS功能,等等。当一个图片被修改时,您应该保持原始信息,如果可能的话。元数据包括标记、标签和评论。这一主题将主要处理标记。有关标记和注释的更多信息,请参考以下:

实现TIFF评论和标签

使用标记

类型的文件的评论

JPEG文件包含元数据信息在用户定义的标记。用户定义的标记以0 xe0到0 xfe范围。这些标记可以有0 xfffd的最大大小,或65533字节。以下标记0 xe0保留图像的编码和插入标记可以保留文件无效。因此,你不应该使用保留标记除非你非常熟悉标记和图像编码在JPEG文件。

然而,TIFF文件不包含标记LEADTOOLS提供了一个“解决方案”将Exif评论从JPEG文件转移到TIFF文件,反之亦然。Exif TIFF文件元数据信息将作为APP1加载标记。因此,您可以加载Exif元数据从一个未压缩的文件并将它存储在一个压缩的Exif文件。你也可以从压缩的Exif文件元数据信息,并将其存储在一个未压缩的Exif文件。然而,请注意一些信息不能被存储在未压缩的Exif文件。例如,音频数据存储在APP2标记和没有对储蓄APP2标记在TIFF文件的内置支持。然而,你仍然可以自己保存音频数据,使用自定义标记。关于保存自定义标签的更多信息,请参考实现TIFF评论和标签

图像元数据的定义RasterMarkerMetadata,RasterTagMetadataRasterCommentMetadata类。这些类可以单独使用或在一个集合查询、阅读或写作图像元数据。的RasterImage类还包含RasterImage.Markers,RasterImage.Tags,RasterImage.CommentsRasterImage.GeoKeys将元数据存储在一个图像类集合。你可以查询、添加或删除该元数据或使用RasterCodecs直接从/对象自动读或写这些集合。

标记(而不是标记和注释)是通用的数据类型包含的所有文件标签、评论和geo密钥文件。一般来说,当工作在一个图像标记或注释,用户必须具有先验知识的元数据类型和预期的值。标记是有用的在处理图像元数据不需要任何以前的知识。

处理标记

LEADTOOLS提供了几个方法来加载、创建、设置,修改,和释放的信息标记。

加载标记(或枚举可用标记)从现有的JPEG文件,电话RasterCodecs.ReadMarkers。结果集合包含所有的标记文件。虽然TIFF文件不支持标记,LEADTOOLS提供了有限的支持通过使用APP1 Exif标记。当你打电话RasterCodecs.ReadMarkersTIFF文件,创建一个APP1标记和所有的TIFF, GPS和Exif评论将存储在它。此外,任何其他标签ID大于0 x8000(32768)将存储在APP1标记。其他信息将被认为是有用的只有图像,不会加载到APP1标记。唯一的例外是分辨率信息,将加载APP1标记。

标记,标记和注释图像中可以直接设置,每一个图片都有RasterImage.Markers集合,允许您添加、删除、插入、清晰、获取和设置。所以,当一个文件被保存使用RasterCodecs.Save方法、标记、标签和/或评论的设置也会得救。

处理标记和注释

RasterCodecs类包含广泛支持查询/负载/保存等标记文件标签、评论领域和地理键(附加标记在GeoTIFF文件中找到)。

以下部分列出了常见的任务执行在处理图像时标记以及LEADTOOLS类,属性和方法使用。

任务:确定一个特定的文件格式支持元数据

LEADTOOLS使用RasterImageFormat枚举来表示一个图像文件格式。你可以通过查询获得一个文件的格式CodecsImageInfo.Format属性返回RasterCodecs.GetInformation方法。当你使用任何的RasterCodecs.Load方法,将原始图像的图像格式存储的RasterImage.OriginalFormat财产。

一旦你有了一个RasterImageFormat,您可以通过以下RasterCodecs静态(共享VB)方法来确定这种格式支持所需的元数据类型:

方法 描述
RasterCodecs.TagsSupported

确定支持标签的格式。TIFF和EXIF是一些常见的文件格式,支持标签。

RasterCodecs.CommentsSupported

确定的格式支持注释字段。TIFF, EXIF DICOM和ICA是一些常见的文件格式,支持注释字段。

RasterCodecs.GeoKeysSupported

确定支持地理关键标签的格式。GeoTIFF是目前唯一的文件格式,支持地理标记的关键。

许多LEADTOOLS元数据查询、阅读和写作方法将抛出一个异常,如果文件格式不支持元数据。例如,试图调用RasterCodecs.ReadTag在一个几乎肯定会抛出一个BMP文件RasterExceptionCode.FeatureNotSupportred。消除需要捕捉和处理这些异常,加快您的代码,您可以使用上述任何一种方法和调用相应的查询,读或写元数据方法的格式是否支持它。

例如,下面的代码将读取描述注释字段从磁盘映像文件。如果文件支持评论,值将被读取和解析,否则,它将返回一个默认的信息:

私人静态字符串ReadDescriptionComment (RasterCodecs rasterCodecsInstance,字符串文件名){/ /得到文件格式使用(CodecsImageInfo信息= rasterCodecsInstance.GetInformation(文件名,)){/ /检查是否这个文件格式支持注释字段如果(RasterCodecs.CommentsSupported (info.Format)){/ /是的,阅读它RasterCommentMetadata = rasterCodecsInstance置评。ReadComment(文件名1 RasterCommentMetadataType.Description);返回comment.ToAscii ();}其他的{/ /不,返回一个默认的评论返回“描述评论不支持”;}}}

类似地,您可以使用RasterCodecs.TagsSupportedRasterCodecs.GeoKeysSupported确定格式支持分别标记和地理TIFF的钥匙。

任务:阅读某个标签的ID或评论一个TIFF或EXIF文件

根据EXIF格式规范,标签ID为0 x8298 (h8298) EXIF标记表示版权字符串。下面的代码将打印的版权标记值中发现一个EXIF文件:

私人静态无效ReadTagById (RasterCodecs rasterCodecsInstance,字符串文件名){/ / RasterCodecs。如果文件名没有ReadTag将抛出一个异常/ /支持标签。如果需要,使用RasterCodecs。TagsSupported第一常量intexifCopyrightTagId = 0 x8298;= rasterCodecsInstance RasterTagMetadata标签。ReadTag(文件名1 exifCopyrightTagId);如果(标签! =){/ /找到标签,显示值Console.WriteLine (tag.ToAscii ());}}

下面的代码将打印一个EXIF文件中的描述评论价值:

私人静态无效ReadCommentById (RasterCodecs rasterCodecsInstance,字符串文件名){/ / RasterCodecs。如果文件名没有ReadComment将抛出一个异常/ /支持评论。如果需要,使用RasterCodecs。CommentsSupported第一RasterCommentMetadata = rasterCodecsInstance置评。ReadComment(文件名1 RasterCommentMetadataType.Description);如果(评论! =){/ /评论,显示值Console.WriteLine (comment.ToAscii ());}}

类似地,您可以使用RasterCodecs.ReadGeoKey读一个TIFF地理主要通过ID文件。

任务:写一个特定的标签或TIFF或EXIF文件置评

根据EXIF格式规范,标签ID为0 x8298 (h8298) EXIF标记表示版权字符串。下面的代码将更新版权标记文本的EXIF文件“版权(c)我公司”:

私人静态无效WriteTagById (RasterCodecs rasterCodecsInstance,字符串文件名){/ /创建标签常量intexifCopyrightTagId = 0 x8298;RasterTagMetadata标签=RasterTagMetadata (exifCopyrightTagId RasterTagMetadataDataType.Ascii,);tag.FromAscii (“我公司版权(c)”);/ /写文件rasterCodecsInstance。WriteTag(文件名,1、标签);}

下面的代码将更新描述注释栏的EXIF文件描述“我”:

私人静态无效WriteCommentById (RasterCodecs rasterCodecsInstance,字符串文件名){/ /创建评论RasterCommentMetadata评论=RasterCommentMetadata (RasterCommentMetadataType.Description);comment.FromAscii (“我的描述”);/ /写文件rasterCodecsInstance。WriteComment(文件名,1、评论);}

类似地,您可以使用RasterCodecs.WriteGeoKey写一个TIFF地理主要通过ID文件。

任务:阅读所有标签和评论中发现一个TIFF或EXIF文件没有加载的图像

使用下面的代码阅读所有的标签中发现一个TIFF或EXIF文件:

私人静态无效ReadAllTagsWithoutLoadingImage (RasterCodecs rasterCodecsInstance,字符串文件名){/ / RasterCodecs。如果文件名没有ReadTags将抛出一个异常/ /支持标签。如果需要,使用RasterCodecs。TagsSupported第一= rasterCodecsInstance IList < RasterTagMetadata >标签。ReadTags(文件名,1);foreach(RasterTagMetadata标签标签){/ /处理标签System.Diagnostics.Trace.WriteLine (“标签发现,id = "+ tag.Id.ToString (“X”));/ /标记数据可以获得tag.GetData()或各种.ToXXX方法}}

上面的代码读取所有标签以及他们的数据。列举所有的标签没有读取数据,您可以使用RasterCodecs.EnumTags方法。这是一个例子:

私人静态无效ReadAllTagsWithoutData (RasterCodecs rasterCodecsInstance,字符串文件名){/ / RasterCodecs。如果文件名没有EnumTags将抛出一个异常/ /支持标签。如果需要,使用RasterCodecs。TagsSupported第一rasterCodecsInstance。TagFound + =EventHandler < CodecsEnumTagsEventArgs > (rasterCodecsInstance_TagFound);rasterCodecsInstance。EnumTags(文件名,1);rasterCodecsInstance。TagFound - =EventHandler < CodecsEnumTagsEventArgs > (rasterCodecsInstance_TagFound);}私人静态无效rasterCodecsInstance_TagFound (对象发送方,CodecsEnumTagsEventArgs e){/ /显示标签IDSystem.Diagnostics.Trace.WriteLine (“标签发现,id = "+ e.Id.ToString (“X”));}

使用下面的代码阅读所有的评论字段中发现一个TIFF或EXIF文件:

私人静态无效ReadAllCommentsWithoutLoadingImage (RasterCodecs rasterCodecsInstance,字符串文件名){/ / RasterCodecs。如果文件名没有ReadComments将抛出一个异常/ /支持评论。如果需要,使用RasterCodecs。CommentsSupported第一= rasterCodecsInstance IList < RasterCommentMetadata >评论。ReadComments(文件名,1);foreach(RasterCommentMetadata评论注释){/ /流程的评论System.Diagnostics.Trace.WriteLine (“评论发现,type = "+ comment.Type.ToString ());}}

类似地,您可以使用RasterCodecs.ReadGeoKeysRasterCodecs.EnumGeoKeys阅读所有TIFF Geo钥匙的ID文件。

任务:更新注释或标记在TIFF或EXIF文件加载图像

根据EXIF格式规范,标签ID为0 x8298 (&h8298) EXIF标记表示版权字符串和标签ID 0 x010e (&h010E)是EXIF标记表示图像标题。下面的代码将更新这些标签的EXIF文件在磁盘上“版权(c)我公司”和“我的图片”。

私人静态无效WriteTagsWithoutLoadingImage (RasterCodecs rasterCodecsInstance,字符串文件名){/ / RasterCodecs。如果文件名没有WriteTags将抛出一个异常/ /支持标签。如果需要,使用RasterCodecs。TagsSupported第一/ /创建标签常量intexifCopyrightTagId = 0 x8298;常量intexifImageTitleTagId = 0 x010e;IList = < RasterTagMetadata >标签列表< RasterTagMetadata > ();RasterTagMetadata标签=RasterTagMetadata (exifCopyrightTagId RasterTagMetadataDataType.Ascii,);tag.FromAscii (“我公司版权(c)”);tags.Add(标签);标签=RasterTagMetadata (exifImageTitleTagId RasterTagMetadataDataType.Ascii,);tag.FromAscii (“我的图片”);tags.Add(标签);/ /写文件rasterCodecsInstance。WriteTags(文件名,1、标签);}

使用下面的代码更新评论版权和描述字段的EXIF文件没有加载图片:

私人静态无效WriteCommentsWithoutLoadingImage (RasterCodecs rasterCodecsInstance,字符串文件名){/ / RasterCodecs。如果文件名没有WriteComments将抛出一个异常/ /支持评论。如果需要,使用RasterCodecs。CommentsSupported第一/ /创建注释IList = < RasterCommentMetadata >评论列表< RasterCommentMetadata > ();RasterCommentMetadata评论=RasterCommentMetadata (RasterCommentMetadataType.Copyright);comment.FromAscii (“我公司版权(c)”);comments.Add(评论);评论=RasterCommentMetadata (RasterCommentMetadataType.Description);comment.FromAscii (“我的描述”);comments.Add(评论);/ /写文件rasterCodecsInstance。WriteComments(文件名、1、注释);}

类似地,您可以使用RasterCodecs.WriteGeoKeys更新TIFF Geo钥匙通过ID文件。

任务:自动加载所有的标签和评论中发现一个TIFF或EXIF文件时,文件被加载

RasterImage类包含一个RasterImage.TagsRasterImage.Comments集合,可用于存储所有与图像相关的标记和注释。

注意:TIFF文件写标签,使用RasterCodecs.WriteTags而不是使用RasterImage.Tags紧随其后的是RasterCodecs.Save

加载所有的标记和注释从磁盘文件到这个集合,你可以使用上面描述的代码来加载标记和注释手动然后将它们添加到图像标记和评论收集或使用CodecsLoadOptions.TagsCodecsLoadOptions.Comments属性自动加载时所有的标签和/或评论图像加载。

使用这些属性保证没有将抛出异常,即使这些元数据格式不支持因为LEADTOOLS将内部电话RasterCodecs.TagsSupported和/或RasterCodecs.CommentsSupported且仅加载元数据格式是否支持他们。

下面的例子将光栅图像以及加载所有标记和注释字段中发现一个磁盘文件:

私人静态RasterImage LoadImageWithTags (RasterCodecs rasterCodecsInstance,字符串文件名){/ /设置标记读取图像时加载rasterCodecsInstance.Options.Load。标记=;rasterCodecsInstance.Options.Load。标签=真正的;rasterCodecsInstance.Options.Load。评论=;rasterCodecsInstance.Options.Load。GeoKeys =;/ /加载和返回图像= rasterCodecsInstance RasterImage形象。负载(文件名,0,CodecsLoadByteOrder。BgrOrGray 1 1);/ /跟踪信息:System.Diagnostics.Trace.WriteLine (”格式是:“+ image.OriginalFormat);System.Diagnostics.Trace.WriteLine (“加载标签数量”+ image.Tags.Count);返回形象;}

类似地,您可以使用CodecsLoadOptions.GeoKeysRasterImage.GeoKeys阅读所有TIFF地理主要通过ID文件。

任务:自动加载、更新、保存图像标记

除了CodecsLoadOptions.TagsCodecsLoadOptions.Comments在前一节中所讨论的,您还可以使用CodecsSaveOptions.TagsCodecsSaveOptions.Comments保存这些元数据的属性保存文件时图像。

通过使用CodecsLoadOptions.Tags,CodecsLoadOptions.Comments,CodecsSaveOptions.TagsCodecsSaveOptions.Comments,您可以执行以下任务的任意组合:

  1. 加载图像数据及其元数据
  2. 处理图像
  3. 操纵图像标记和注释
  4. 保存图像及其元数据回磁盘使用原始格式

下面的例子将会加载一个EXIF图像,添加水印图像表面,并添加这个词“LEADTOOLS”形象EXIF评论标题标签和描述字段。其他图像标记和注释将被保存的新形象:

私人静态无效LoadUpdateSaveImageMetadata (RasterCodecs rasterCodecsInstance,字符串文件名){/ / 1。设置标记读取图像时加载rasterCodecsInstance.Options.Load。标记=;rasterCodecsInstance.Options.Load。标签=真正的;rasterCodecsInstance.Options.Load。评论=真正的;rasterCodecsInstance.Options.Load。GeoKeys =;/ / 2。加载图片使用(= rasterCodecsInstance RasterImage形象。负载(文件名,0,CodecsLoadByteOrder。BgrOrGray 1,1)){/ / 3。添加字符串“LEADTOOLS”形象/ /注意:如果你不需要将字符串添加到图像,然后/ /跳到4。更新te元数据IntPtr hdc = image.CreateLeadDC ();使用(图形g = Graphics.FromHdc (hdc))使用(字体f =字体(FontFamily。40岁的GenericSansSerif FontStyle.Bold))使用(刷b =SolidBrush(颜色。Color.Black FromArgb (128))){g.DrawString (“LEADTOOLS”f b, 0, 0);}RasterImage.DeleteLeadDC (hdc);/ / 4。更新元数据/ /因为我们设置CodecsLoadOptions。标签和CodecsLoadOptions.Comments/ /为true, RasterCodecs对象会阅读所有标签和评论/ /文件并将它们存储在RasterImage。标签和RasterImage.Comments/ /分别集合。/ /找到EXIF标题标签常量intexifImageTitleTagId = 0 x010e;RasterTagMetadata imageTitleTag =;foreach(RasterTagMetadata标签image.Tags){如果(标签。Id = = exifImageTitleTagId){imageTitleTag =标记;打破;}}/ /如果发现标签,更新它如果(imageTitleTag ! =){字符串title = imageTitleTag.ToAscii ();title =“LEADTOOLS——”+标题;imageTitleTag.FromAscii(标题);}/ /找到注解字段描述RasterCommentMetadata descriptionComment =;foreach(RasterCommentMetadata评论image.Comments){如果(评论。类型= = RasterCommentMetadataType.Description){descriptionComment =评论;打破;}}/ /如果发现评论,更新它如果(descriptionComment ! =){字符串title = descriptionComment.ToAscii ();title =“LEADTOOLS——”+标题;descriptionComment.FromAscii(标题);}/ /更新现有的元数据,您可以/ /添加和删除尽可能多的标记和注释/ /在这里集合/ / 5。设置时写的标记图像保存rasterCodecsInstance.Options.Save。标记=;rasterCodecsInstance.Options.Save。标签=真正的;rasterCodecsInstance.Options.Save。评论=真正的;rasterCodecsInstance.Options.Save。GeoKeys =;/ /保存它/ /因为我们设置CodecsSaveOptions。标签和CodecsSaveOptions.Comments/ /为true, RasterCodecs对象会写的所有标记和注释/ / RasterImage。标签和RasterImage.Commentscollections respectively and/ /保存到文件rasterCodecsInstance。保存(形象、文件名、形象。OriginalFormat, 0);}}

类似地,您可以使用CodecsLoadOptions.GeoKeysCodecsSaveOptions.GeoKeys自动读/写所有关键TIFF地理从/到一个文件中。

任务:从文件中删除一个标签的ID没有加载它

最快的方法来删除一个标签与一个已知的文件是通过使用IDRasterCodecs.DeleteTag方法。这种方法的优点是直接从磁盘文件删除标签而不需要加载和解析图像数据。

任务:读或写文件盖章

使用的邮票是一种特殊的元数据只EXIF, CMP,就是以前和FlashPix格式存储图像的缩略图。读或写邮票,使用RasterCodecs.ReadStampRasterCodecs.SaveStamp

LEADTOOLS成像、医学和文档
188金宝搏的网址客服|支持|联系我们|知识产权的通知
©1991 - 2021领先的技术公司。保留所有权利。