0

私は最近、アプリ内に画像を保存する方法のスタックオーバーフローに関する答えを見つけました:

-(void) saveImage:(UIImage *)image withFileName:(NSString *)imageName ofType:(NSString *)extension inDirectory:(NSString *)directoryPath {
if ([[extension lowercaseString] isEqualToString:@"png"]) {
    [UIImagePNGRepresentation(image) writeToFile:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", imageName, @"png"]] options:NSAtomicWrite error:nil];
} else if ([[extension lowercaseString] isEqualToString:@"jpg"] || [[extension lowercaseString] isEqualToString:@"jpeg"]) {
    [UIImageJPEGRepresentation(image, 1.0) writeToFile:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", imageName, @"jpg"]] options:NSAtomicWrite error:nil];
} else {
    ALog(@"Image Save Failed\nExtension: (%@) is not recognized, use (PNG/JPG)", extension);
}
}

ユーザーが写真/ビデオライブラリから選択したビデオを保存してアプリ内に保存するにはどうすればよいですか?何か違いはありますか?ユーザーがアップロードしたい動画のリストを追跡しようとしています。ユーザーが準備ができたら、それらすべての動画をアプリのサーバーにアップロードできます。

4

1 に答える 1

1

NSFileManagerさて、私はあなたの目的を本当に理解していませんが、あるURLから別のURLにファイルをコピーするために使用してみることができます:

NSError *error;
[[NSFileManager defaultManager] copyItemAtURL:mediaURL toURL:outputURL error:&error];

何らかの方法(つまり、トリミング、品質の変更)でムービーを操作する必要がある場合は、AVExportSessionを使用する必要があります。

+ (void)writeMovieAtURL:(NSURL *)mediaURL
                  toURL:(NSURL *)outputURL
             withQality:(NSInteger)quality
      completionHandler:(void (^)(NSURL *, NSError *))completion {


    AVURLAsset *asset = [AVURLAsset URLAssetWithURL:mediaURL options:nil];


    NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:asset];
    NSString *exportPreset;

    switch (quality) {
        case 0 : { exportPreset = AVAssetExportPreset1280x720;      } break;
        case 1 : { exportPreset = AVAssetExportPreset640x480;       } break;
        case 2 : { exportPreset = AVAssetExportPresetMediumQuality; } break;
        case 3 : { exportPreset = AVAssetExportPresetLowQuality;    } break;
    }

    if (nil != exportPreset && [compatiblePresets containsObject:exportPreset]) {
        AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]
                                  initWithAsset:asset presetName:exportPreset];

        exportSession.outputURL = outputURL;

        exportSession.outputFileType = AVFileTypeQuickTimeMovie;

        // set some params to the session

        [exportSession exportAsynchronouslyWithCompletionHandler:^{                
            switch ([exportSession status]) {
                case AVAssetExportSessionStatusCompleted: {                       
                    completion(outputURL, nil);
                    [exportSession release];
                } break;
                case AVAssetExportSessionStatusWaiting : {
                    NSLog(@"Export Waiting");
                } break;
                case AVAssetExportSessionStatusExporting : {
                    NSLog(@"Export Exporting");
                } break;
                case AVAssetExportSessionStatusFailed : {
                    completion(outputURL, [exportSession error]);
                    [exportSession release];
                } break;
                case AVAssetExportSessionStatusCancelled : {
                    NSDictionary *userInfo = [NSDictionary dictionaryWithObject:@"Movie export session canceled"
                                                                         forKey:@"ocalizedDescription"];                        
                    NSError *error = [NSError errorWithDomain:@"your.domain" 
                                                         code:123 
                                                     userInfo:userInfo];                        
                    completion(outputURL, error);
                    [exportSession release];
                } break;
            }
        }];
    }
}
于 2013-01-18T17:35:36.123 に答える