编写cpp脚本 将经纬度写入图像exif信息中
时间: 2023-05-12 22:05:31 浏览: 119
用ExifLib 在WinCE中向JPG写入时间 经纬度
4星 · 用户满意度95%
可以使用开源库libexif来实现将经纬度写入图像exif信息中。具体实现可以参考以下代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <exif-data.h>
int main(int argc, char **argv)
{
if (argc < 4) {
printf("Usage: %s <image_file> <latitude> <longitude>\n", argv[0]);
return 1;
}
const char *image_file = argv[1];
double latitude = atof(argv[2]);
double longitude = atof(argv[3]);
ExifData *exif_data = exif_data_new_from_file(image_file);
if (!exif_data) {
printf("Failed to read exif data from %s\n", image_file);
return 1;
}
ExifByteOrder byte_order = exif_data_get_byte_order(exif_data);
ExifEntry *entry_latitude = exif_data_get_entry(exif_data, EXIF_TAG_GPS_LATITUDE);
ExifEntry *entry_longitude = exif_data_get_entry(exif_data, EXIF_TAG_GPS_LONGITUDE);
ExifEntry *entry_latitude_ref = exif_data_get_entry(exif_data, EXIF_TAG_GPS_LATITUDE_REF);
ExifEntry *entry_longitude_ref = exif_data_get_entry(exif_data, EXIF_TAG_GPS_LONGITUDE_REF);
if (!entry_latitude || !entry_longitude || !entry_latitude_ref || !entry_longitude_ref) {
printf("Failed to get exif entries for latitude and longitude\n");
exif_data_unref(exif_data);
return 1;
}
char latitude_ref = latitude >= 0 ? 'N' : 'S';
char longitude_ref = longitude >= 0 ? 'E' : 'W';
exif_set_rational(entry_latitude, byte_order, (ExifRational[]){{abs(latitude) * 1000000, 1000000}}, 1);
exif_set_rational(entry_longitude, byte_order, (ExifRational[]){{abs(longitude) * 1000000, 1000000}}, 1);
exif_set_string(entry_latitude_ref, byte_order, &latitude_ref);
exif_set_string(entry_longitude_ref, byte_order, &longitude_ref);
exif_data_save_data(exif_data, NULL, 0);
exif_data_unref(exif_data);
printf("Latitude and longitude written to exif data of %s\n", image_file);
return 0;
}
阅读全文