本教程展示如何使用LEADTOOLS SDK在c# Windows控制台应用程序中读取和写入Exif标记和注释。
概述 | |
---|---|
总结 | 本教程介绍如何在c# Windows控制台应用程序中使用Exif标记和注释。 |
完成时间 | 30分钟 |
Visual Studio项目 | 下载教程项目(3kb) |
平台 | c# Windows控制台应用程序 |
IDE | Visual Studio 2017, 2019 |
开发许可 | 下载LEADTOOLS |
用另一种语言试试 |
|
步骤熟悉创建项目的基本步骤添加引用和设置License教程,在工作之前读写Exif标签和注释-控制台c#教程。
中创建的项目的副本开始添加引用和设置License教程。如果您没有该项目,请按照该教程中的步骤创建它。
所需要的参考资料取决于项目的目的。引用可以通过以下两种方法中的一种添加(但不能同时添加)。
如果使用NuGet引用,本教程需要以下NuGet包:
Leadtools.Formats.Raster.Common
如果使用本地DLL引用,则需要以下DLL。
dll位于< INSTALL_DIR > \ LEADTOOLS22 \ Bin \ Dotnet4 \ x64
:
Leadtools.dll
Leadtools.Codecs.dll
Leadtools.Codecs.Cmp.dll
Leadtools.Codecs.Tif.dll
有关应用程序需要哪些DLL文件的完整列表,请参阅在你的申请中包含的文件.
许可证解锁项目所需的特性。它必须在调用任何工具箱函数之前设置。有关详细信息,包括针对不同平台的教程,请参阅设置运行时License.
有两种类型的运行时许可证:
请注意
中详细介绍了添加LEADTOOLS NuGet和本地引用以及设置许可添加引用和设置License教程。
随着项目的创建、引用的添加和许可的设置,编码就可以开始了。
在解决方案资源管理器,打开Program.cs
.将以下语句添加到顶部的using块中Program.cs
:
使用系统;
使用System.Collections.Generic;
使用先;
使用Leadtools;
使用Leadtools.Codecs;
使用Leadtools.ImageProcessing;
属性中添加两个新的字符串变量主要
方法命名_srcFile
而且_destFile
上面的调用SetLicense
方法。集_srcFile
等于包含源EXIF文件和set的文件路径_destFile
等于文件路径,导出包含添加注释的EXIF文件。
控件中添加一个新方法程序
类命名(string _srcFile, string _destFile, RasterCodecs _codecs)
.方法调用下面的此方法SetLicense
方法,在使用
的新实例RasterCodecs
,如下图所示。
静态无效主要(字符串[]参数)
{
字符串_srcFile =@" exif源文件的路径";
字符串_destFile =@"输出exif文件的路径";
SetLicense ();
使用(RasterCodecs _codecs =新RasterCodecs ())
{
ReadAndWriteExifComments(_srcFile, _destFile, _codecs);
ReadAndWriteExifTags (_srcFile _codecs);
}
控制台。WriteLine (“按任意键退出”);
控制台。ReadKey (真正的);
}
将下面的代码添加到ReadAndWriteExifComments
方法来翻转加载的图像,将标记写入文件,说明图像已被翻转,然后读取创建的用户注释。
静态无效ReadAndWriteExifComments (字符串_srcFile,字符串_destFile, RasterCodecs _codecs
{
使用(RasterImage _image = _codecs.Load(_srcFile))
{
//写注释
//翻转图像。
FlipCommand flipCmd =新FlipCommand (真正的);
flipCmd.Run (_image);
//添加一个用户注释到文件中,并以另一个名称保存。
RasterCommentMetadata comment =新RasterCommentMetadata ();
//当写一个用户注释时,前8个字节必须包含“ASCII”字,后面跟着3个空字符。
发表评论。类型= rastercommentmetadattype . usercomment;
字符串commentString =“ASCII \ \ 0 \ 0”;
commentString + =“图像被翻转了。”;
//将字符串转换为字节数组,并将字节设置为注释
字节[] bytes = System.Text.Encoding.ASCII.GetBytes(commentString);
comment.FromByte(字节);
//将用户注释添加到图像的注释集合中
_image.Comments.Add(评论);
_codecs.Options.Save。评论=真正的;
_codecs。保存(_image, _destFile, RasterImageFormat)。今年24岁的Exif);
//阅读评论
RasterCommentMetadata commentRead = _codecs。ReadComment(_destFile, 1, rastercommentmetadattype . usercomment);
字节[] commentBytes = commentRead.GetData();
字符串commentStringRead = System.Text.Encoding.ASCII。GetString(commentBytes, 8, commentBytes.)长度- 8);
控制台。WriteLine ($"用户评论= {commentStringRead}");
}
}
控件中添加一个新方法程序
类命名ReadAndWriteExifTags(string _srcFile, RasterCodecs _codecs)
.方法调用下面的此方法ReadAndWriteExifComments
方法,在使用
的新实例RasterCodecs
,如前一节所示。将下面的代码添加到ReadAndWriteExifTags
方法写入私有标记,然后从指定文件中读取所有标记。
静态无效ReadAndWriteExifTags (字符串_srcFile, RasterCodecs _codecs)
{
RasterImageFormat格式;
使用(CodecsImageInfo信息= _codecs。GetInformation (_srcFile假))
{
format = info.Format;
}
//加载标签
List
tags =零; 如果(! RasterCodecs.TagsSupported(格式)
{
控制台。WriteLine (“文件格式不支持标签”);
返回;
}
intPhoneNumber = 0x8001;//添加私有(自定义)“电话号码”标签
字节[] bytes = System.Text.Encoding.ASCII.GetBytes(“+ 1-800-637-4699”);
RasterTagMetadata标签=新RasterTagMetadata (PhoneNumber RasterTagMetadataDataType。Ascii字节);
_codecs。WriteTag(_srcFile, 1, tag);
标签=新列表< RasterTagMetadata > (_codecs。ReadTags (_srcFile,1));
字符串txtFileName =“_metadata.txt”;
使用(StreamWriter writer = File.CreateText(txtFileName))
{
//列出标签到一个文本文件
ExportTags(作家,“标签”、标签);
}
//显示我们创建的文本文件
System.Diagnostics.Process.Start (txtFileName);
}
控件中添加一个新方法程序
类命名ExportTags(StreamWriter写入器,字符串名称,列表
.方法中调用此方法ReadAndWriteExifTags
方法,如上所示。将下面的代码添加到ExportTags
方法列出读到TXT文件的标签。
静态无效ExportTags (StreamWriter作家,字符串name, List
tags) {
作家。WriteLine ({0}:“、名称);
如果(标签! =零)
{
foreach(RasterTagMetadata标签在标签)
{
作家。WriteLine ("Id: 0x{0},数据长度:{1}"tag.Id.ToString (“X”)、tag.GetData () . length);
}
}
其他的
{
作家。WriteLine (“不支持”);
}
writer.WriteLine ();
}
按下运行项目F5,或选择Debug ->开始调试.
如果正确地遵循了这些步骤,应用程序将运行,并首先编写Exif用户评论,读取编写的用户评论,然后读取给定图像中的Exif标记,并将这些标记写入外部TXT文件。
本教程展示了如何读写Exif注释和标记。此外,我们还介绍了如何使用RasterCodecs
而且RasterTagMetadata
类。