0

こんにちは、私は実際に私のNSDocumentDirectory.Imで保存するのに苦労しAGImagePickerています。はい、これを に保存できました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

これを試して:

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 に答える
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]];

そのパスを使用して、画像ファイルを保存します。

読み込み中、

を MD5 に変換UIImagePickerControllerMediaURLし、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]];

fileExistsAtPath次に、NSFileManagerのメソッドでチェックを行い、存在する場合はパスからファイルをロードします。それでおしまい。

: このためにUIImagePickerControllerMediaURLは、ドキュメント ディレクトリに保存した画像をアプリのどこか (DB または NSUserDefaults 内) にローカルに保存して、読み込み時に使用できるようにする必要があります。

于 2012-07-11T06:42:14.257 に答える