gpt4 book ai didi

objective-c - 如何在 iOS 中获取照片的原始文件名?

转载 作者:技术小花猫 更新时间:2023-10-29 10:08:33 25 4
gpt4 key购买 nike

我目前正在开发一个 iPad 应用程序,用户可以在其中的文本字段中输入照片文件名(作为字段注释的一部分),然后他们会将照片导入 iPad 的照片库。该应用程序将使用 ALAssetsLibrary 访问图书馆并枚举照片,寻找具有他们在现场笔记中输入的文件名的照片。这将是拍摄照片的相机赋予照片的文件名。例如“DSC_0019.JPG”。

这不可能吗?

我注意到,如果我将照片从我的相机导入 iPad,然后在我的 Mac 上打开 iPhoto 并将 iPad 视为相机,我可以“获取 iPad 上保存的图像的信息”并查看原始文件名 I正在寻找。然而,这不包含在 iPad 上的元数据中。

如有任何帮助,我们将不胜感激。

这是我的代码:

(在使用 CFDictionary 时,几乎所有内容都是空的,除了没有我要找的内容的 Exif 键)

- (void)viewDidLoad
{
[super viewDidLoad];

//start activity animation
[self.activity setHidden:NO];
[self.activity startAnimating];

//init our arrays
autoAssignedAssets = [[NSMutableArray alloc] init];
unAssignedRecords = [[NSMutableArray alloc] init];
unAssignedAssets = [[NSMutableArray alloc] init];

//setup the library
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];



//[ BLOCK ] => assetEnumerator
//
void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) {

if (result != nil) {

if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto] ) {


//=================================================================

ALAssetRepresentation* representation = [result defaultRepresentation];

// create a buffer to hold the data for the asset's image
uint8_t *buffer = (Byte*)malloc(representation.size);// copy the data from the asset into the buffer
NSUInteger length = [representation getBytes:buffer fromOffset: 0.0 length:representation.size error:nil];

// convert the buffer into a NSData object, free the buffer after
NSData *adata = [[NSData alloc] initWithBytesNoCopy:buffer length:representation.size freeWhenDone:YES];

// setup a dictionary with a UTI hint. The UTI hint identifies the type of image we are dealing with (ie. a jpeg, png, or a possible RAW file)
// specify the source hint
NSDictionary* sourceOptionsDict = [NSDictionary dictionaryWithObjectsAndKeys: (id)[representation UTI] ,kCGImageSourceTypeIdentifierHint, nil];


// create a CGImageSource with the NSData. A image source can contain x number of thumbnails and full images.
CGImageSourceRef sourceRef = CGImageSourceCreateWithData((CFDataRef) adata, (CFDictionaryRef) sourceOptionsDict);

[adata release];

CFDictionaryRef imagePropertiesDictionary;

// get a copy of the image properties from the CGImageSourceRef
imagePropertiesDictionary = CGImageSourceCopyPropertiesAtIndex(sourceRef,0, NULL);

//NSString *imageFilename = (NSString*)CFDictionaryGetValue(imagePropertiesDictionary, kCGImagePropertyCIFFImageFileName);

NSLog(@"%@", (NSDictionary *)CFDictionaryGetValue(imagePropertiesDictionary, kCGImagePropertyExifDictionary));

CFNumberRef imageWidth = (CFNumberRef)CFDictionaryGetValue(imagePropertiesDictionary, kCGImagePropertyPixelWidth);
CFNumberRef imageHeight = (CFNumberRef)CFDictionaryGetValue(imagePropertiesDictionary, kCGImagePropertyPixelHeight);

int w = 0;
int h = 0;

CFNumberGetValue(imageWidth, kCFNumberIntType, &w);
CFNumberGetValue(imageHeight, kCFNumberIntType, &h);

// cleanup memory
CFRelease(imagePropertiesDictionary);
CFRelease(sourceRef);

//NSLog(@"width: %d, height: %d", w, h);
//NSLog(@"%@", imageFilename);



//=================================================================


//NSDictionary *metadata = [[result defaultRepresentation] metadata];
//NSLog(@"\n\nAsset Info: %@", result);
//NSLog(@"\n\n\n\nMetaData: %@", metadata);
[autoAssignedAssets addObject:result];

}//end if photo

}//end if

}; //end assetEnumerator block



//[ BLOCK ] => assetGroupEnumerator
//
void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) {

if(group != nil) {
[group enumerateAssetsUsingBlock:assetEnumerator];
}//end if


//now we're done, reload and stop animations
[self.tableView reloadData];
[self.activity stopAnimating];
[self.activity setHidden:YES];

}; //end assetGroupEnumerator block



//[ BLOCK ] => failureBlock
//
void (^failureBlock)(NSError *) = ^(NSError *error) {

NSString *errorTitle = [error localizedDescription];
NSString *errorMessage = [error localizedRecoverySuggestion];
NSString *errorFailureDesc = [error localizedFailureReason];

NSLog(@"Error: %@, Suggestion: %@, Failure desc: %@", errorTitle, errorMessage, errorFailureDesc);

}; //end failureBlock




//loop over all the albums and process the pictures with the blocks above
[library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:assetGroupEnumerator failureBlock: failureBlock];


}//end viewDidLoad

最佳答案

我能够像这样获取图像的原始文件名:

NSString* originalFileName = [[asset defaultRepresentation] filename];

关于objective-c - 如何在 iOS 中获取照片的原始文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7180880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com