私のプログラムが生成した画像 (おそらくカメラから、おそらくそうではない) を iPhone のシステム フォト ライブラリに保存するには、どうすればよいですか?
			
			163440 次
		
15 に答える
            417        
        
		
この関数を使用できます:
UIImageWriteToSavedPhotosAlbum(UIImage *image, 
                               id completionTarget, 
                               SEL completionSelector, 
                               void *contextInfo);
保存が完了したときに通知を受け取る場合は、 completionTarget、completionSelector、contextInfoのみが必要です。UIImageそれ以外の場合は、を渡すことができますnil。
于 2008-10-07T15:32:02.110   に答える
    
    
            63        
        
		
iOS 9.0 で廃止されました。
iOS 4.0+ AssetsLibrary フレームワークを使用してそれを行うには、UIImageWriteToSavedPhotosAlbum よりもはるかに高速な方法があります。
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
    [library writeImageToSavedPhotosAlbum:[image CGImage] orientation:(ALAssetOrientation)[image imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error){
    if (error) {
    // TODO: error handling
    } else {
    // TODO: success handling
    }
}];
[library release];
    于 2010-09-21T13:53:03.990   に答える
    
    
            13        
        
		
覚えておくべきこと: コールバックを使用する場合は、セレクターが次の形式に準拠していることを確認してください。
- (void) image: (UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo;
そうしないと、次のようなエラーでクラッシュします。
[NSInvocation setArgument:atIndex:]: index (2) out of bounds [-1, 1]
于 2013-04-02T03:35:26.343   に答える
    
    
            10        
        
		
そのように配列からそれに画像を渡すだけです
-(void) saveMePlease {
//Loop through the array here
for (int i=0:i<[arrayOfPhotos count]:i++){
         NSString *file = [arrayOfPhotos objectAtIndex:i];
         NSString *path = [get the path of the image like you would in DOCS FOLDER or whatever];
         NSString *imagePath = [path stringByAppendingString:file];
         UIImage *image = [[[UIImage alloc] initWithContentsOfFile:imagePath]autorelease];
         //Now it will do this for each photo in the array
         UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
        }
}
タイプミスで申し訳ありませんが、その場でこれを行っただけですが、要点はわかります
于 2010-03-30T02:16:53.373   に答える
    
    
            4        
        
		
スウィフトでは:
    // Save it to the camera roll / saved photo album
    // UIImageWriteToSavedPhotosAlbum(self.myUIImageView.image, nil, nil, nil) or 
    UIImageWriteToSavedPhotosAlbum(self.myUIImageView.image, self, "image:didFinishSavingWithError:contextInfo:", nil)
    func image(image: UIImage!, didFinishSavingWithError error: NSError!, contextInfo: AnyObject!) {
            if (error != nil) {
                // Something wrong happened.
            } else {
                // Everything is alright.
            }
    }
    于 2015-03-18T21:32:30.117   に答える
    
    
            4        
        
		
写真の配列を保存するときは、for ループを使用せず、次のようにします。
-(void)saveToAlbum{
   [self performSelectorInBackground:@selector(startSavingToAlbum) withObject:nil];
}
-(void)startSavingToAlbum{
   currentSavingIndex = 0;
   UIImage* img = arrayOfPhoto[currentSavingIndex];//get your image
   UIImageWriteToSavedPhotosAlbum(img, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
}
- (void)image: (UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo{ //can also handle error message as well
   currentSavingIndex ++;
   if (currentSavingIndex >= arrayOfPhoto.count) {
       return; //notify the user it's done.
   }
   else
   {
       UIImage* img = arrayOfPhoto[currentSavingIndex];
       UIImageWriteToSavedPhotosAlbum(img, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
   }
}
    于 2013-08-13T23:01:51.243   に答える
    
    
            1        
        
		
homeDirectoryPath = NSHomeDirectory();
unexpandedPath = [homeDirectoryPath stringByAppendingString:@"/Pictures/"];
folderPath = [NSString pathWithComponents:[NSArray arrayWithObjects:[NSString stringWithString:[unexpandedPath stringByExpandingTildeInPath]], nil]];
unexpandedImagePath = [folderPath stringByAppendingString:@"/image.png"];
imagePath = [NSString pathWithComponents:[NSArray arrayWithObjects:[NSString stringWithString:[unexpandedImagePath stringByExpandingTildeInPath]], nil]];
if (![[NSFileManager defaultManager] fileExistsAtPath:folderPath isDirectory:NULL]) {
    [[NSFileManager defaultManager] createDirectoryAtPath:folderPath attributes:nil];
}
    于 2011-03-11T11:46:05.020   に答える
    
    
            1        
        
		
私の最後の答えはそれをします。
保存する画像ごとに、NSMutableArrayに追加します
    //in the .h file put:
NSMutableArray *myPhotoArray;
///then in the .m
- (void) viewDidLoad {
 myPhotoArray = [[NSMutableArray alloc]init];
}
//However Your getting images
- (void) someOtherMethod { 
 UIImage *someImage = [your prefered method of using this];
[myPhotoArray addObject:someImage];
}
-(void) saveMePlease {
//Loop through the array here
for (int i=0:i<[myPhotoArray count]:i++){
         NSString *file = [myPhotoArray objectAtIndex:i];
         NSString *path = [get the path of the image like you would in DOCS FOLDER or whatever];
         NSString *imagePath = [path stringByAppendingString:file];
         UIImage *image = [[[UIImage alloc] initWithContentsOfFile:imagePath]autorelease];
         //Now it will do this for each photo in the array
         UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
        }
}
    于 2010-05-20T01:33:32.690   に答える
    
    
            0        
        
		
これを使用できます
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
   UIImageWriteToSavedPhotosAlbum(img.image, nil, nil, nil);
});
    于 2014-01-22T11:21:51.693   に答える