首页 > 编程语言 >C# 读取照片的EXIF信息

C# 读取照片的EXIF信息

时间:2022-11-20 21:04:18浏览次数:65  
标签:读取 EXIF C# exif openFileDialog1 tag sb ExifTagNames filename


一、使用 MetadataExtractor 读取 EXIF 信息

1、NuGet 中安装

在 NuGet 中搜索并安装 MetadataExtractor;

2、包信息

我安装后会有两个包:MetadataExtractor 2.0.0 和 XmpCore 5.1.3

3、代码实现

我是创建的 WPF 项目:

private void BTOpen_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();

openFileDialog1.InitialDirectory = "c:\\";
openFileDialog1.Filter = "JPEG|*.jpg;*.jpeg;*.jpe;*.jfif";
openFileDialog1.FilterIndex = 2;
openFileDialog1.RestoreDirectory = true;

if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
try
{
string filename = openFileDialog1.FileName;
if (File.Exists(filename))
{
TBFile.Text = filename;
IMImg.Source = new BitmapImage(new Uri(filename, UriKind.Absolute));
StringBuilder sb = new StringBuilder();
var directories = ImageMetadataReader.ReadMetadata(filename);
// print out all metadata
foreach (var directory in directories)
foreach (var tag in directory.Tags)
sb.AppendLine($"{directory.Name} - {tag.Name} = {tag.Description}");
TBInfo.Text = sb.ToString();
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
}
}
}
4、效果图

C# 读取照片的EXIF信息_工具类

二、简单的读取工具类

1、源码

因为之前写过一个照片分类软件,用过一个简单的工具类:
在我的 GitHub 中有,地址:​​​C# 工具组​​​ —— ​​EXIF 工具​

目录:Fork/Azylee.Utils/Azylee.Core/IOUtils/ImageUtils/
ExifHelper.cs
ExifTagNames.cs

2、使用代码:
//一个简单的Exif信息读取工具类,根据需要转换数据类型
ExifHelper exif = new ExifHelper(filename);
foreach (ExifTagNames tag in (ExifTagNames[]) Enum.GetValues(typeof(ExifTagNames)))
{
double _double = exif.GetPropertyDouble((int)tag);
string _string = exif.GetPropertyString((int)tag);
char _char = '=';// exif.GetPropertyChar((int)tag);
sb.AppendLine($"{tag.ToString()} : {_double} : {_string} : {_char}");
}
sb.AppendLine($"GpsAltitude: {exif.GetPropertyDouble((int)ExifTagNames.GpsAltitude)}");
sb.AppendLine($"GpsLatitude: {exif.GetPropertyDouble((int)ExifTagNames.GpsLatitude)}");
sb.AppendLine($"GpsLongitude: {exif.GetPropertyDouble((int)ExifTagNames.GpsLongitude)}");


标签:读取,EXIF,C#,exif,openFileDialog1,tag,sb,ExifTagNames,filename
From: https://blog.51cto.com/yuzhyn/5872028

相关文章

  • RV-LINK:Eclipse 使用 RV-LINK 调试 RISC-V 程序
    RV-LINK项目主页:​​https://gitee.com/zoomdy/RV-LINK​​​最新的文档请访问:​​https://gitee.com/zoomdy/RV-LINK/wikis​​,这里的内容可能没有及时更新。前期准备按......
  • RV-LINK:将 Longan Nano 开发板变成 RISC-V 仿真器
    实物图右边红色小板子是作为仿真器的LonganNano,左边蓝色大板子是GD32VF103V-EVAL开发板。下载GD32MCUDfuTool到这里​​http://gd32mcu.21ic.com/documents/index/......
  • RV-LINK:将 GD32VF103C-START 开发板变成 RISCV-V 仿真器
    实物图左边是作为仿真器的GD32VF103C-START,右边是GD32VF103V-EVAL开发板。下载GD32MCUDfuTool到这里​​http://gd32mcu.21ic.com/documents/index/classify_id/7​......
  • Windows server 2016 安装oracle的教程图解
    这篇文章主要介绍了Windowsserver2016安装oracle的教程图解,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.安装oracleOracle的......
  • eCos中的同步原语简要
    信号量信号量是最基本的通信原语,可用于线程同步、事件通知、共享数据保护,包括二值信号量和计数信号量,在非嵌入式系统中,信号量还被用于进程间通信。eCos的计数信号量包含了两......
  • eCos仿真目标机(2)――安装
    宿主机软件为了获得仿真目标机的完整功能,用户必须编译安装I/O辅助进程ecosynth以及其它支持文件。没有辅助进程的情况下开发仿真目标机应用也是可以的,但是仅有少量的I/O设备......
  • 为仿真器添加eCos多线程调试支持,GDBServer Extender 0.0.1 使用说明
    可以使用RedBoot或者仿真器调试eCos系统,RedBoot集成的GDBStubs已经支持eCos的多线程调试,使用GDB命令infothreads就可以读取当前的线程状态。但是使用仿真器时,由于仿真器不......
  • P8196 [传智杯 #4 决赛] 三元组 ----- 数组与vector
    题目描述给定一个长度为 nn 的数列 aa,对于一个有序整数三元组 (i,j,k)(i,j,k),若其满足 1\leqi\leqj\leqk\leqn1≤i≤j≤k≤n 并且 a_i+a_j=a_kai​+......
  • 利用xmake在c++项目中编译与调用webassmebly
    最近在尝试用webassembly替代lua作为c++程序的脚本。刚好xmake也支持了webassembly的编译。下面是踩坑记录。项目需要两个target:一个c++项目、一个webassembly项目。需要......
  • eCos系统CPU负载测量
    cpuload组件包提供了一种估算CPU负载的方式。它可以估算最近0.1秒、1秒和10秒内的CPU负载百分比。负载测量API首先,必须在被测目标机上对测量算法进行校准,一旦校准完成后就可......