当前位置: 首页 > 网络知识

Exiv2库的使用(C++)

时间:2026-01-26 14:19:58
1 #include <iostream> 2 #include <exiv2/exiv2.hpp> 3 #pragma cment(lib,"libexiv2.lib") 4 #pragma cment(lib,"xmpsdk.lib") 5 #pragma cment(lib,"libexpat.lib") 6 #pragma cment(lib,"zlib1.lib") 7 8 //查找一个ExifKey避免没有的Key产生段错误 9 std::string FindExifKey(Exiv2::ExifData &ed, std::string key) 15 return pos>value().toString(); 16 } 17 18 int main(int argc, char *argv[]) 24 25 //判断文件是否有效 26 if (!Exiv2::fileExists(argv[1], true)) 30 31 //获取文件大小 32 FILE *FP = fopen(argv[1], "rb"); 33 fseek(FP, 0, SEEK_END); //定位到文件末 34 int FileSize = ftell(FP); //文件长度 35 fclose(FP); 36 37 Exiv2::Image::AutoPtr &image = Exiv2::ImageFactory::open(argv[1]); 38 if (image.get() == 0) 39 43 44 //读取照片的exif信息 45 image>readMetadata(); 46 Exiv2::ExifData ed = image>exifData();//得到exif信息 47 48 if (ed.empty()) 49 53 54 std::cout << "文件名称 :" << argv[1] << std::endl; 55 std::cout << "文件大小 :" << FileSize << std::endl; 56 std::cout << "版权 :" << FindExifKey(ed, "Exif.Imageopyright") << std::endl; 57 std::cout << "创作人 :" << FindExifKey(ed, "Exif.Image.Artist") << std::endl; 58 std::cout << "相机品牌 :" << FindExifKey(ed, "Exif.Image.Make") << std::endl; 59 std::cout << "相机型号 :" << FindExifKey(ed, "Exif.Image.Model") << std::endl; 60 std::cout << "镜头型号 :" << FindExifKey(ed, "Exif.Photo.LensModel") << std::endl; 61 std::cout << "镜头序列号 :" << FindExifKey(ed, "Exif.Photo.LensSerialNumber") << std::endl; 62 std::cout << "ISO :" << FindExifKey(ed, "Exif.Photo.ISOSpeedRatings") << std::endl; std::cout << "光圈 :" << FindExifKey(ed, "Exif.Photo.FNumber") << std::endl; 64 std::cout << "焦距 :" << FindExifKey(ed, "Exif.Photo.FocalLength") << std::endl; 65 std::cout << "快门 :" << FindExifKey(ed, "Exif.Photo.ExposureTime") << std::endl; 66 std::cout << "拍摄时间 :" << FindExifKey(ed, "Exif.Image.DateTime") << std::endl; 67 std::cout << "闪光灯 :" << FindExifKey(ed, "ExifanonCs.FlashMode") << std::endl; 68 std::cout << "水平分辨率 :" << FindExifKey(ed, "Exif.Image.XResolution") << std::endl; 69 std::cout << "垂直分辨率 :" << FindExifKey(ed, "Exif.Image.YResolution") << std::endl; 70 std::cout << "照片尺寸 :" << FindExifKey(ed, "Exif.Photo.PixelYDimension") << " x " << FindExifKey(ed, "Exif.Photo.PixelXDimension") << std::endl; 71 72 std::cout << "\n下面是原始信息:\n" << std::endl; 73 for (Exiv2::ExifData::iterator tmp = ed.begin(); tmp != ed.end(); tmp++) 76 return 0; 77 }



上一篇:C++ std::chrono的时钟Clock
下一篇:蔡司激光共聚焦荧光显微镜 (二)
Exiv2
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素