Exiv2:如何读取UTF8文件路径的照片?

发布于 2024-12-13 11:00:51 字数 201 浏览 3 评论 0原文

我正在使用 GTKmm 和 exiv2 读取照片中的 EXIF 元数据。然而 Exiv2 函数只接受 std::string 文件路径...当我在非 ASCII 文件路径上尝试它时,它会破坏程序。

有什么办法可以读取这些数据吗?如果 Exiv2 接受 Glib::ustrings 那就太好了...

我对 Windows 和 Linux 的解决方案感兴趣。

I am using GTKmm and exiv2 to read EXIF metadata form photos. However Exiv2 functions accept only std::string file paths... When I try it on not ASCII filepath it crushes the program.

Is there any way to read that data? It would be great if Exiv2 accepted Glib::ustrings...

I'm interested in solutions for Windows and Linux.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

她比我温柔 2024-12-20 11:00:51

好吧,我有解决办法!

您只需要使用函数 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;

}

Ok, I have a solution!

You just need to use function Glibmm::locale_from_utf8 to convert UTF8 string to std(ascii) string.
Here is an example:

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;

}
一身骄傲 2024-12-20 11:00:51

如果这是在 Windows 中,那么您可以使用 GetShortPathName

If this is in Windows then you can use GetShortPathName.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文