照片EXIF信息库EXIV2(c++)

本文介绍了如何利用EXIV2库在C++中处理照片的EXIF信息,特别是针对无地理信息的照片进行定位。在Windows环境下编译EXIV2库可能遇到困难,但该库提供了丰富的标签支持。
摘要由CSDN通过智能技术生成

前一段时间要做基于flicker提供的带有exif信息的照片库给无地理信息的photos进行定位。
大部分exif的库都不是很好用,exiv2 (http://www.exiv2.org) 挺不错。但在windows下编译很烦。

//need Qt4/Qt5 support
#include <QtCore>
#include <iostream>
#include <exiv2/exiv2.hpp>
using namespace std;
using namespace Exiv2;

QStringList loadFromFile(const char* sfilename)
{
    QStringList slist;
    slist.clear();

    QFile _file(sfilename);
    if (!_file.open(QIODevice::ReadOnly))
    {
        cout<<"open file failed. error."<<endl;
        return slist;
    }

    QTextStream _in(&_file);

    while(!_in.atEnd())
    {
        QString str = _in.readLine().trimmed();
        if(str.isEmpty()) continue;
        slist.append(str);
    }

    cout<<"slist size = "<<slist.size()<<endl;
    return slist;
}


int main()
{

    Image::AutoPtr image = ImageFactory::open("/Users/Yaoyao/Desktop/IMG_2428.JPG");
    if(image.get() == 0)
    {
        cout<<"read file error."<<endl;
        return -1;
    }
    image->readMetadata();
    ExifData ed = image->exifData();

    if(ed.empty())
    {
        cout<<"ed empty error!"<<endl;
        return -2;
    }

    //some tag location
    cout<<ed["Exif.Image.GPSTag"]<<endl;
    cout<<ed["Exif.GPSInfo.GPSLatitudeRef"]<<endl;
    cout<<ed["Exif.GPSInfo.GPSLatitude"]<<endl;
    cout<<ed["Exif.GPSInfo.GPSLongitudeRef"]<<endl;
    cout<<ed["Exif.GPSInfo.GPSLongitude"]<<endl;
    cout<<ed["Exif.GPSInfo.GPSAltitudeRef"]<<endl;
    cout<<ed["Exif.GPSInfo.GPSAltitude"]<<endl;
    cout<<ed["Exif.GPSInfo.GPSDateStamp"]<<endl;


    //test
    QStringList slist = loadFromFile("/Users/Yaoyao/Documents/Code/ReadPhotoExif/ReadPhotoExif/exif_tags.txt");
    if(slist.size() == 0)
        return -1;

    foreach(QString str, slist)
    {
        try
        {
            cout<<str.toStdString().data()<<": "<<ed[str.toStdString().data()]<<endl;
        }
        catch (...)
        {
            //cout<<"[ EXCEPTION !!! ]"<<str.toStdString().data()<<endl;
            continue;
        }
    }


    image->clearExifData();

    return 1;
}

其中tag标签支持:
http://www.exiv2.org/tags.html

Exif.Image.ProcessingSoftware
Exif.Image.NewSubfileType
Exif.Image.SubfileType
Exif.Image.ImageWidth
Exif.Image.ImageLength
Exif.Image.BitsPerSample
Exif.Image.Compression
Exif.Image.PhotometricInterpretation
Exif.Image.Thresholding
Exif.Image.CellWidth
Exif.Image.CellLength
Exif.Image.FillOrder
Exif.Image.DocumentName
Exif.Image.ImageDescription
Exif.Image.Make
Exif.Image.Model
Exif.Image.StripOffsets
Exif.Image.Orientation
Exif.Image.SamplesPerPixel
Exif.Image.RowsPerStrip
Exif.Image.StripByteCounts
Exif.Image.XResolution
Exif.Image.YResolution
Exif.Image.PlanarConfiguration
Exif.Image.GrayResponse
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值