iOS 앱에서 맞춤 이미지 갤러리를 만들려고합니다. 사용자가 첨부 된 정보로 나중에 앱에서 끌어 올 수 있도록 특정 메타 데이터를 이미지와 함께 저장할 수있게하고 싶습니다.맞춤 메타 데이터로 이미지를 저장하지 못했습니다.
사용자가 사진을 촬영 할 때먼저, 앱이 앱의 사용자 정의 앨범에 이미지를 저장 : 다음
Saving image with metadata: {
Event = t;
Person = "George James";
PictureName = tt;
}
: 나는 다음과 같은 로그 메시지가 저장되면
UITextField *nameField = [alertView textFieldAtIndex:0];
NSMutableDictionary *metaData = [[NSMutableDictionary alloc] init];
[metaData setObject:currentEvent forKey:kMetaDataEventKey];
[metaData setObject:[AppDelegate getActivePerson].name forKey:kMetaDataPersonKey];
[metaData setObject:nameField.text forKey:kMetaDataNameKey];
NSLog(@"Saving image with metadata: %@", metaData);
NSMutableDictionary *realMetaData = [[NSMutableDictionary alloc] init];
[realMetaData setObject:metaData forKey:kCGImagePropertyTIFFDictionary];
[library saveImage:imageToSave toAlbum:albumName metadata:realMetaData withCompletionBlock:^(NSError *error) {
if (error != nil)
{
NSLog(@"Error saving picture? %@", error);
}
[self.tableView reloadData];
}];
나중에 이미지를 검색 할 때이 함수를 사용합니다.
-(void) loadAssets
{
self.assets = [NSMutableArray arrayWithCapacity:album.numberOfAssets];
[album enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
if (result != nil)
{
NSDictionary *metaData = result.defaultRepresentation.metadata;
NSLog(@"Retrieved image metadata: %@", metaData);
}
else
{
[self.tableView reloadData];
}
}];
}
그러나 로그에
Retrieved image metadata: {
ColorModel = RGB;
DPIHeight = 72;
DPIWidth = 72;
Depth = 8;
Orientation = 1;
PixelHeight = 720;
PixelWidth = 960;
"{Exif}" = {
ColorSpace = 1;
ComponentsConfiguration = (
1,
2,
3,
0
);
ExifVersion = (
2,
2,
1
);
FlashPixVersion = (
1,
0
);
PixelXDimension = 960;
PixelYDimension = 720;
SceneCaptureType = 0;
};
"{TIFF}" = {
Orientation = 1;
ResolutionUnit = 2;
XResolution = 72;
YResolution = 72;
"_YCbCrPositioning" = 1;
};
}
library
는 ALAssetsLibrary
예이고, 나는 같은 메타 데이터를 저장할 수 있도록 saveImage: toAlbum:
방법은 this blog post에서 약간 수정 : 성공적 이미지와 관련된 메타 데이터를 저장하지 않았다
-(void)saveImage:(UIImage *)image toAlbum:(NSString *)albumName metadata:(NSDictionary *)metadata withCompletionBlock:(SaveImageCompletion)completionBlock
{
//write the image data to the assets library (camera roll)
[self writeImageToSavedPhotosAlbum:image.CGImage
metadata:metadata
completionBlock:^(NSURL* assetURL, NSError* error) {
//error handling
if (error!=nil) {
completionBlock(error);
return;
}
//add the asset to the custom photo album
[self addAssetURL: assetURL
toAlbum:albumName
withCompletionBlock:completionBlock];
}
];
}
이미지가 카메라를 사용하는 UIImagePickerController
에서 나옵니다. 그림이 메타 데이터가 누락 된 올바른 앨범에 성공적으로 저장됩니다.
저장 /로드 프로세스에 문제가 있습니까? 실제로 사용자 지정 메타 데이터를 이미지에 저장할 수 있습니까?
내가 저장하는 것은 모두 'NSString'뿐입니다.이 경우 맞춤 개체 클래스를 만들어야합니까? –
@DanF 아니요, 모두 NSString 인 경우 NSCoding을 준수 할 필요가 없습니다. 몇 가지 테스트를 실행하고 방금 내 대답을 업데이트했습니다. –
내가 원하는 키를 저장할 수 없지만 사용자 정의 데이터를 저장할 수 있도록 허용하며, 해석 할 수있는 문자열을 저장할 수 있습니다. 적어도 지금 내가 원하는 최고의 기능을 얻을 수 있습니다. 감사합니다. –