我使用GTKmm和exiv2来读取EXIF元数据形式的照片。但是Exiv2函数只接受std::字符串文件路径…当我在非ASCII文件路径上尝试时,它会使程序崩溃。
有办法读取数据吗?如果Exiv2能接受Glib::ustrings就太好了…
我对Windows和Linux的解决方案很感兴趣。
好了,我有办法了!
您只需要使用函数Glibmm::locale_from_utf8将UTF8字符串转换为std(ascii)字符串。下面是一个例子:
void get_exif_data(const Glib::ustring &image_src)
{
Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(Glib::locale_from_utf8(image_src));
image->readMetadata();
Exiv2::ExifData &exifData = image->exifData();
Exiv2::ExifData::const_iterator it = exifData.begin();
for(it;it!=exifData.end();it++) cout << it->key() + ": " + it->getValue() << endl;
}
如果在Windows中,则可以使用GetShortPathName