关于jpg文件格式的一个情景-第三篇(exiv2:后实践)

从jpg文件中读取横向和纵向DPI,不过你的图片中可能是没有这个字段的

bool getDpiFromMemory(const uchar* data, size_t size, double& xDpi, double& yDpi) {
    try {
        // 从内存创建 Exiv2 图像对象
        Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open(data, size);
        if (!image.get()) {
            std::cerr << "Error: Cannot parse image metadata!" << std::endl;
            return false;
        }

        image->readMetadata();
        Exiv2::ExifData& exifData = image->exifData();

        // 查找 DPI 信息
        auto xRes = exifData.findKey(Exiv2::ExifKey("Exif.Image.XResolution"));
        auto yRes = exifData.findKey(Exiv2::ExifKey("Exif.Image.YResolution"));

        if (xRes != exifData.end() && yRes != exifData.end()) {
            xDpi = xRes->toFloat();
            yDpi = yRes->toFloat();
            return true;
        }
        else {
            std::cout << "DPI not found in metadata." << std::endl;
            return false;
        }
    }
    catch (const Exiv2::Error& e) {
        std::cerr << "Exiv2 Error: " << e.what() << std::endl;
        return false;
    }
}

 结果:

image

 

posted @ 2025-08-05 18:21  Wind_Swing_Dunn  阅读(6)  评论(0)    收藏  举报