iOS, как сохранить метаданные Photo Sphere XMP при сохранении их в Camera Roll?

Я могу добавить метаданные Photo Sphere XMP к равнопрямоугольной фотографии. Я загрузил фотографию с метаданными XMP в Google Фото, и Google Фото может быть распознано как сферическое фото. Затем я попытался сохранить фотографию с метаданными XMP в фотопленку. Я поделился фотографией в Google Фото из фотопленки, но Google Фото не знает, что это сферическое фото. Я попытался загрузить фотографию и проанализировать ее, но обнаружил, что все метаданные XMP исчезли. Кажется, iOS будет редактировать метаданные, пока фотография сохраняется в фотопленку. Есть ли способ сохранить метаданные фотографии XMP при сохранении их в фотопленке?

// raw jpg data to NSData
NSString *img = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"equirectangular_orig.jpg"];
NSData* imgData = [[NSFileManager defaultManager] contentsAtPath:img];
NSMutableData *newImgData = [NSMutableData dataWithData:imgData];

// writing XMP metadata to newImgData
// ...
// ...

// saving the newImgData to new jpg file
NSString *path = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"equirectangular_xmp.jpg"];
NSURL *url = [NSURL fileURLWithPath:path];
[[NSFileManager defaultManager] removeItemAtPath:[url absoluteString] error:nil];
[newImgData writeToURL:url atomically:YES];

// saving the new jpg file to camera roll
UIImage *newImg = [UIImage imageWithData:newImgData];
UIImageWriteToSavedPhotosAlbum(newImg, self, nil, nil);

person srjohnhuang    schedule 23.03.2016    source источник
comment
на самом деле я обнаружил, что как только мы сохраним изображение из NSData в UIImage, UIImage нарушит исходные данные.   -  person srjohnhuang    schedule 10.09.2016


Ответы (1)


Ключевой момент: использование

[PHAssetChangeRequest creationRequestForAssetFromImageAtFileURL: url] 

вместо

[PHAssetChangeRequest creationRequestForAssetFromImage:image]

поскольку UIImage сломает исходный файл, просто используйте временный URL-адрес, чтобы сохранить необработанные данные исходного изображения, и используя API createRequestForAssetFromImageAtFileURL.

person srjohnhuang    schedule 05.07.2018