21xrx.com
2024-12-27 19:57:22 Friday
登录
文章检索 我的文章 写文章
C++操作Exif信息
2023-07-01 13:06:16 深夜i     --     --
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信息,这对于图像处理和存档非常有用。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复