0

嗨,我真的很难保存我的NSDocumentDirectory.ImAGImagePicker顺便说一句。是的,我能够将其保存在NSDocumentDirectory. 但是如何唯一地保存它们(就它们自己而言,然后将它们的名称转换为oneSlotImages)或使用它们的唯一 ID 保存它们然后将它们加载回来。抱歉,我对这UIImagePickerControllerMediaURL件事有点陌生。,我认为这将是我解决其他问题的方法,因为在保存时不重叠它们。如何使用他们的唯一 ID 或UIImagePickerControllerMediaURL.

        for (int i = 0; i < info.count; i++) {
            NSLog(@"%@", [info objectAtIndex:i]);
            NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory,    NSUserDomainMask ,YES );
            NSString *documentsDir = [paths objectAtIndex:0];
            NSString *savedImagePath = [documentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"oneSlotImages%d.png", i]];


            ALAssetRepresentation *rep = [[info objectAtIndex: i] defaultRepresentation];
            UIImage *image = [UIImage imageWithCGImage:[rep fullResolutionImage]];

            //----resize the images
            image = [self imageByScalingAndCroppingForSize:image toSize:CGSizeMake(256,256*image.size.height/image.size.width)];

            NSData *imageData = UIImagePNGRepresentation(image);
            [imageData writeToFile:savedImagePath atomically:YES];

谢谢您的帮助。非常感激。

4

3 回答 3

1

你总是可以保留一个使用过的名字列表并做这样的事情

int i = 1;

while([listOfUsedNames containsObject:nextAvailableTile]) {

      nextAvailableTitle = [kDefaultImageName stringByAppendingFormat:@" %d", i];
      i++;
}

// 找到一个未使用的名称

于 2012-07-11T06:45:10.013 回答
0

每张图片的 URL 都是唯一的,对吧?所以我们可以利用这个。将 URL 转换为 MD5 字符串(形成每个图像的唯一标识符)。并使用该名称保存(如“ MD5string .png”)。

为什么我们不能使用这个?希望这对您有所帮助。

要转换为 MD5,请创建一个名为 NSString+MD5.h 的文件并将代码

#import <Foundation/Foundation.h>
#import <CommonCrypto/CommonDigest.h>


@interface NSString(MD5)

- (NSString *)MD5;

@end

在里面。然后在NSString+MD5.m中,

#import "NSString+MD5.h"

@implementation NSString(MD5)

- (NSString*)MD5
{
    const char *ptr = [self UTF8String];

    unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH];

    CC_MD5(ptr, strlen(ptr), md5Buffer);
    NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) 
        [output appendFormat:@"%02x",md5Buffer[i]];

    return output;
}
@end

将类导入到NSString+MD5.h您想将 MD5 函数与普通NSString对象一起使用的地方。

如果您有UIImagePickerControllerMediaURL字符串,则在您的代码中,因为它对于您可以转换为 MD5 字符串的每个文件都是唯一的,例如

NSString *imgURL    = [NSString stringWithString: UIImagePickerControllerMediaURL];
NSString *MD5String = [imgURL MD5];
NSString *savedImagePath = [documentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", MD5String]];

使用该路径保存图像文件。

加载时,

将其转换UIImagePickerControllerMediaURL为 MD5 并在 Documents 目录中检查该文件

// In this the UIImagePickerControllerMediaURL is the URL of media file to load
NSString *imgURL    = [NSString stringWithString: UIImagePickerControllerMediaURL];
NSString *MD5String = [imgURL MD5];
NSString *savedImagePath = [documentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", MD5String]];

然后使用fileExistsAtPathNSFileManager 的方法进行检查,如果存在则从路径中加载文件。就是这样。

注意:为此,您希望将UIImagePickerControllerMediaURL保存在文档目录中的图像保留在应用程序的本地某个位置(在 DB 或 NSUserDefaults 中),以便在加载时使用。

于 2012-07-11T06:42:14.257 回答
0

试试这个:

NSMutableString *imageName = [[[NSMutableString alloc] initWithCapacity:0] autorelease];

CFUUIDRef theUUID = CFUUIDCreate(kCFAllocatorDefault);
if (theUUID) {
    [imageName appendString:NSMakeCollectable(CFUUIDCreateString(kCFAllocatorDefault, theUUID))];
            CFRelease(theUUID);
}
[imageName appendString:@".png"];
于 2012-07-11T06:56:01.033 回答