// 官方 EXIF 规范 V 2.32 https://exiv2.org/tags.html
使用方法:(只写了Set,Get相关数据的方法自行阅读使用. 使用到部分关键字已备注,未备注的关键字自行阅读官方规范进行翻译)
/// <summary>
/// 设置图像元数据
/// </summary>
/// <param name="imagePath">图像路径</param>
private void SetImageMetadata(string imagePath)
{
if (imagePath == "")
{
Debug.LogError("路径不能为空");
return;
}
ExifData imageExifData = new ExifData(imagePath);
//--说明
//图像描述
imageExifData.SetTagValue(ExifTag.ImageDescription, imagePath, StrCoding.Utf8);
//图像用户评论 备注
imageExifData.SetTagValue(ExifTag.UserComment, "备注", StrCoding.Utf8);
//--来源
作者
imageExifData.SetTagValue(ExifTag.Artist, "HH", StrCoding.Utf8);
//拍摄时间
DateTime originalTime = new DateTime(DateTime.Now.Ticks);
imageExifData.SetTagValue(ExifTag.DateTimeOriginal, originalTime);
//程序名称
imageExifData.SetTagValue(ExifTag.Software,"Unity3D", StrCoding.Utf8);
//--图像
图像ID
imageExifData.SetTagValue(ExifTag.ImageUniqueId, "123456", StrCoding.Utf8);
压缩 https://exiftool.org/TagNames/EXIF.html#Compression
imageExifData.SetTagValue(ExifTag.Compression, 2, ExifTagType.UShort);
//分辨率单位 1 = 无 2 = 英寸 3 = 厘米
imageExifData.SetTagValue(ExifTag.ResolutionUnit,1, ExifTagType.UShort);
//颜色表示 0x1 = sRGB 0x2 = Adobe RGB 0xfffd = Wide Gamut RGB 0xfffe = ICC Profile 0xffff = Uncalibrated
imageExifData.SetTagValue(ExifTag.ColorSpace, 0x1, ExifTagType.UShort);
//压缩的位/像素
ExifRational compressedBitsPerPixel = new ExifRational(100, 1000);
imageExifData.SetTagValue(ExifTag.CompressedBitsPerPixel, compressedBitsPerPixel, ExifTagType.URational);
//--照相机
//照相机制造商
imageExifData.SetTagValue(ExifTag.Make, "中国", StrCoding.Utf8);
//照相机型号
imageExifData.SetTagValue(ExifTag.Model, "中国相机", StrCoding.Utf8);
//光圈值
ExifRational fNumber = new ExifRational(80, 100);
imageExifData.SetTagValue(ExifTag.FNumber, fNumber, ExifTagType.URational);
//曝光时间
ExifRational exposureTime = new ExifRational(1, 20);
//ExifRational.FromDecimal(1.637m);
imageExifData.SetTagValue(ExifTag.ExposureTime, exposureTime, ExifTagType.URational);
//ISO速度
imageExifData.SetTagValue(ExifTag.IsoSpeedRatings, 2, ExifTagType.UShort);
//曝光补偿
ExifRational exposureBiasValue = new ExifRational(10, 1000);
imageExifData.SetTagValue(ExifTag.ExposureBiasValue, exposureBiasValue, ExifTagType.SRational);
//焦距
ExifRational focalLength = ExifRational.FromDecimal(10);
imageExifData.SetTagValue(ExifTag.FocalLength, focalLength, ExifTagType.URational);
//最大光圈
ExifRational mxApertureValue = new ExifRational(20, 1000);
imageExifData.SetTagValue(ExifTag.MaxApertureValue, mxApertureValue, ExifTagType.URational);
//测光模式 0 = 未知 1 = 平均值 2 = 中心加权平均值 3 = 点 4 = 多点 5 = 多段 6 = 部分 255 = 其他
imageExifData.SetTagValue(ExifTag.MeteringMode, 0, ExifTagType.UShort);
//目标距离
ExifRational subjectDistance = new ExifRational(10, 1000);
imageExifData.SetTagValue(ExifTag.SubjectDistance, subjectDistance, ExifTagType.URational);
//闪光灯模式 https://exiftool.org/TagNames/EXIF.html#Flash
imageExifData.SetTagValue(ExifTag.Flash,0, ExifTagType.UShort);
闪光灯能量
ExifRational flashEnergy = new ExifRational(0, 1000);
imageExifData.SetTagValue(ExifTag.FlashEnergy, flashEnergy, ExifTagType.URational);
//35mm焦距
imageExifData.SetTagValue(ExifTag.FocalLengthIn35mmFilm,2, ExifTagType.UShort);
//--高级照片
//对比度 0 = 正常 1 = 低 2 = 高
imageExifData.SetTagValue(ExifTag.Contrast, 0, ExifTagType.UShort);
亮度
ExifRational brightnessValue = new ExifRational(300, 1000);
imageExifData.SetTagValue(ExifTag.BrightnessValue, brightnessValue, ExifTagType.SRational);
//光源 https://exiftool.org/TagNames/EXIF.html#LightSource
imageExifData.SetTagValue(ExifTag.LightSource, 0, ExifTagType.UShort);
//曝光程序 0 = 未定义 1 = 手动 2 = 程序自动曝光 3 = 光圈优先自动曝光 4 = 快门速度优先自动曝光 5 = 创意(慢速) 6 = 动作(高速) 7 = 人像 8 = 风景 9 = B门
imageExifData.SetTagValue(ExifTag.ExposureProgram,0, ExifTagType.UShort);
//饱和度 0 = 正常 1 = 低 2 = 高
imageExifData.SetTagValue(ExifTag.Saturation, 0, ExifTagType.UShort);
//清晰度 0 = 正常 1 = 软 2 = 硬
imageExifData.SetTagValue(ExifTag.Sharpness, 0, ExifTagType.UShort);
//白平衡 0 = 自动 1 = 手动
imageExifData.SetTagValue(ExifTag.WhiteBalance,0, ExifTagType.UShort);
数字缩放(数码变焦倍率)
ExifRational digitalZoomRatio = new ExifRational(0, 1000);
imageExifData.SetTagValue(ExifTag.DigitalZoomRatio, digitalZoomRatio, ExifTagType.URational);
//图像Exif版本
imageExifData.SetTagValue(ExifTag.ExifVersion, "2030", StrCoding.Utf8);
//--GPS
//经纬度
GeoCoordinate longitude = GeoCoordinate.FromDecimal((decimal)116.40286, false);
imageExifData.SetGpsLongitude(longitude);
GeoCoordinate latitude = GeoCoordinate.FromDecimal((decimal)39.93046, true);
imageExifData.SetGpsLatitude(latitude);
//高度
imageExifData.SetGpsAltitude(100);
try
{
//第一个参数DestFileNameWithPath是null或省略,该方法Save将覆盖现有的图像文件。也可以通过在参数中传递文件名来将图像另存为新文件名DestFileNameWithPath。
imageExifData.Save();
Debug.Log($"保存 {imagePath} Image元数据完成");
}
catch
{
Debug.LogError("文件被写保护 | 拒绝访问该文件 | 该文件不再可用,例如,它已被删除或卷已被移除。 | EXIF 数据太大。JPEG 中的最大 EXIF 数据大小为 65526 字节,TIFF 和 PNG 中为 2 GB。");
}
}