21xrx.com
2025-03-30 01:11:15 Sunday
文章检索 我的文章 写文章
C++操作Exif信息
2023-07-01 13:06:16 深夜i     17     0
C++ Exif 图片 信息 处理

Exif是一种用于描述照片和图像的元数据格式。它可以存储摄像机型号、拍摄时间、拍摄地点、光圈、曝光时间等信息。 在C++中,我们可以使用Exiv2库来读取和修改Exif信息。

首先,我们需要安装Exiv2库并将其包含在我们的项目中。然后,我们可以使用以下代码来读取图片的Exif信息:

#include <iostream>
#include <exiv2/exiv2.hpp>
int main(){
 try {
  // 读取图片
  Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open("image.jpg");
  image->readMetadata();
  
  // 读取Exif信息
  Exiv2::ExifData &exifData = image->exifData();
  Exiv2::ExifData::iterator end = exifData.end();
  for (Exiv2::ExifData::iterator i = exifData.begin(); i != end; ++i) {
    std::cout << i->key() << " : " << i->value().toString() << std::endl;
  }
 }
 catch (Exiv2::AnyError& e)
  std::cout << "Error: " << e << std::endl;
 
 return 0;
}

在上面的代码中,我们首先打开了一个名为“image.jpg”的图片,并读取了它的Exif信息。然后,我们可以使用ExifData对象遍历Exif信息。每个Exif标签都有一个唯一的键,我们可以使用这个键来获取其值。在这个代码中,我们使用std::cout输出Exif信息。

如果我们想修改Exif信息,在读取之后,我们可以使用以下代码:

// 修改Exif信息
Exiv2::ExifData &exifData = image->exifData();
exifData["Exif.Image.Make"] = "Canon";
exifData["Exif.Image.Model"] = "Canon EOS 5D Mark IV";
exifData["Exif.Photo.FNumber"] = Exiv2::Rational(14, 10);
exifData["Exif.Photo.ExposureTime"] = Exiv2::Rational(1, 60);
image->setExifData(exifData);
// 保存图片
image->writeMetadata();

在这个代码中,我们通过键来修改Exif信息。例如,我们将“Exif.Image.Make”键(即照相机制造商)设置为“Canon”,将“Exif.Image.Model”键(即照相机型号)设置为“Canon EOS 5D Mark IV”,将“Exif.Photo.FNumber”键(即光圈值)设置为14/10,将“Exif.Photo.ExposureTime”键(即曝光时间)设置为1/60。最后,我们使用Exiv2的setExifData()函数将修改后的Exif信息写回文件,并将其保存。

总之,使用C++操作Exif信息非常方便。通过使用Exiv2库,我们可以轻松地读取和修改Exif信息,这对于图像处理和存档非常有用。

  
  

评论区

请求出错了