Exiv2 照片GPS信息添加


数码相机拍照都有EXIF信息,GPS信息就是加在EXIF里的;
Exiv2是一个开源的项目用来读写照片的EXIF信息,附上官网exiv2/
关于Exiv2和EXIF的介绍网上的资料很多,不在多介绍
结合官方的例子(exiv2/doc/examples),用Qt对Exiv2进行简单的封装实现添加GPS添加和EXIF信息查询
.h文件

1 #include <QObject> 2 #include<QString> 3 #include"exiv2/exiv2.hpp" 4 using namespace std; 5 6 //经度 纬度 高度 7 const QString GPS_Longitude="Exif.GPSInfo.GPSLongitude"; 8 const QString GPS_Latitude="Exif.GPSInfo.GPSLatitude"; 9 const QString GPS_Altitude="Exif.GPSInfo.GPSAltitude"; 10 11 class ImageAnalysis : public QObject 12 ;

pp文件

1 #include "imageanalysis.h" 2 #include<QDebug> 3 #include<iostream> 4 #include<QMessageBox> 5 #include<qmath.h> 6 using namespace std; 7 8 ImageAnalysis::ImageAnalysis(QObject *parent) : QObject(parent),m_imagePath("") 9 11 12 void ImageAnalysis::Reset(const QString &imagePath) 13 24 m_imagePtr>readMetadata(); 25 m_edlear(); 26 m_ed=m_imagePtr>exifData(); 27 } 28 //读取exif信息 29 QString ImageAnalysis::FindExifKey(const QString &key) 30 37 return QString::frLocal8Bit(pos>value().toString().data()); 38 } 39 /// \brief ImageAnalysis::AddExifGPSInfo 添加EXIF GPS信息 40 /// \param keyStr exif key值 Exif.GPSInfo.GPSLongitude 经度 Exif.GPSInfo.GPSLatitude 纬度 Exif.GPSInfo.GPSAltitude 高度 41 /// \param value exif value 42 /// \return 43 bool ImageAnalysis::AddExifGPSInfo(const QString &keyStr,const QString& value) 44 51 else 52 56 std::string _keyStr=keyStr.toLocal8Bit(); 57 std::string _value=tempValue.toLocal8Bit(); 58 Exiv2::ExifKey tmp=Exiv2::ExifKey(_keyStr); 59 Exiv2::ExifData::iterator pos=m_ed.findKey(tmp); 60 //重复判断 61 if (pos == m_ed.end()) 62 69 else//exif有 key 70 81 WriteExifData(); 82 return true; 83 } 84 85 ///把修改的数据写入 86 bool ImageAnalysis::WriteExifData() 87 95 return false; 96 } 97 ///度转度分秒,秒保留小数点后4位 98 QStringList ImageAnalysis::DegreeToDDMMSS(const QString& degree) 99 106 else 107 112 qlist<<dd<<mm<<ss; 113 return qlist; 114 } 115 116 // 根据n的值递归求度,分,秒 117 QString ImageAnalysis::GetDDMMSS(const QString &degree,int n,bool bEnd) 118 127 while (n) 128 134 } 135 ///经纬度转换为EXIF信息 如:113.211 133/1 12/1 396000/10000 136 QString ImageAnalysis::DDMMSSToExivGps(QStringList &strList) 137 143 QString dd,mm,ss; 144 dd=strList.at(0)+"/1 "; 145 mm=strList.at(1)+"/1 "; 146 ss=strList.at(2); 147 ss=AltitudeToExiivGps(ss); 148 return dd+mm+ss; 149 } 150 //数字字符串转化为exif,保留到小数点后四位,39.6转换后396000/10000 151 QString ImageAnalysis::AltitudeToExiivGps(const QString &altitude) 152 158 QString fz,after,front; 159 QStringList tList=altitude.split("."); 160 //小数点前 161 front=tList.at(0); 162 //小数点后,截取前四位 1 after=tList.at(1)+"0000"; 164 after=after.mid(0,4); 165 //整理后的分子 166 fz=front+after; 167 return fz+"/10000"; 168 }

后面就是一些目录和文件的操作;
具体的程序如下:

主要功能是读取文件夹目录下的所有照片,读取一个txt文件的内容,其中
txt的格式 经度,纬度,高度如下



上一篇:蔡司激光共聚焦荧光显微镜 (三)

下一篇:C++ 计时方法 std::chrono


Exiv2
Copyright © 2002-2019 k262电脑网 www.k262.cn 皖ICP备2020016292号
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!QQ:251442993 热门搜索 网站地图