【问题标题】:Save UIImage to Photo Album with writeImageToSavedPhotosAlbum使用 writeImageToSavedPhotosAlbum 将 UIImage 保存到相册
【发布时间】:2012-09-23 04:58:39
【问题描述】:

我正在尝试将 UIImage 保存到相册。我尝试了几种方法,最后一种是:

-(IBAction)captureLocalImage:(id)sender{

[photoCaptureButton setEnabled:NO];

// Save to assets library
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

[library writeImageToSavedPhotosAlbum: imageView.image.CGImage metadata:nil completionBlock:^(NSURL *assetURL, NSError *error2)
 {
     //             report_memory(@"After writing to library");
     if (error2) {
         NSLog(@"ERROR: the image failed to be written");
     }
     else {
         NSLog(@"PHOTO SAVED - assetURL: %@", assetURL);
     }

     runOnMainQueueWithoutDeadlocking(^{
         //                 report_memory(@"Operation completed");
         [photoCaptureButton setEnabled:YES];
     });
 }];  

}

imageView 是一个 UIImageView ,其中包含我要保存的图像。 在日志上我得到“PHOTO SAVED -assetURL: (null)”并且照片没有保存到库中。

我做错了什么?

【问题讨论】:

  • 我遇到了同样的问题。还没想出解决办法..
  • 在下面查看我的答案。我解决了我的问题,也许这对你也有帮助。

标签: iphone objective-c ios alassetslibrary


【解决方案1】:

对于 iOS 11+ 需要 隐私 - 照片库添加使用说明 in info.plist

在 info.plist 中添加 NSPhotoLibraryAddUsageDescription

代码:

UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);

Reference

【讨论】:

    【解决方案2】:

    当您从相机拍照时,您可以将图像保存在选取器委托中:

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
        UIImage *image = [info valueForKey:UIImagePickerControllerEditedImage];   
        [library writeImageToSavedPhotosAlbum:image.CGImage metadata:[info objectForKey:UIImagePickerControllerMediaMetadata] completionBlock:^(NSURL *assetURL, NSError *error) {
    ...
        }];
    
    
    
        [picker dismissViewControllerAnimated:YES completion:nil];
    }
    

    【讨论】:

      【解决方案3】:

      由于 iOS 8.1 UIKit 框架具有 UIImageWriteToSavedPhotosAlbum() 函数,正如 vishy 所说。

      我是这样使用的:

       UIImageWriteToSavedPhotosAlbum(myImage, self, "image:didFinishSavingWithError:contextInfo:", nil)
      

      然后

      func image(image: UIImage, didFinishSavingWithError error: NSError?, contextInfo:UnsafePointer<Void>) {
          // check error, report image has been saved, ...
      }
      

      【讨论】:

        【解决方案4】:

        我正在使用 GPUImage,显然库本身存在某种问题。

        上面的代码绝对有效。如果您想了解有关此问题的更多信息:

        GPUImagePicture with imageFromCurrentlyProcessedOutput doesn't get UIImage

        【讨论】:

          【解决方案5】:

          只需使用下面这条线将图像保存在您的照片库中

          UIImageWriteToSavedPhotosAlbum(imageView.image,nil,nil,nil);
          

          :)

          【讨论】:

          • 我认为OP是专门询问如何保存到特定专辑,而不仅仅是一般如何保存图像。 (我确实意识到我在这里玩游戏迟到了,但在我看来这是一个重要的区别)
          • 伊朗说他无法将图像保存到相册。这听起来像是他想保存到特定专辑。 1. Idan 没有接受你的回答。他接受了自己的回答。向下滚动并查看。 2. 你没有错,但你没有回答整个问题。在我看来,下面的@vishy 在具体回答明确的问题方面做得更好,即如何不保存到相机胶卷而是保存到特定相册。
          • 帕拉斯,我们显然不同意,任何进一步的沟通都应该通过私人聊天。基本上,从我的角度来看,@vishy 在你写答案时已经回答了这个问题。你的答案比vishy的信息少,而且你是在vishy之后写的,所以对我来说似乎既不必要又逊色。无论如何,这没什么大不了的。我的一票反对不会对您的信誉产生任何重大影响。
          • @MaxvonHippel 没问题,我只是给出了我的意见,你也站在你这边。谢谢:)
          【解决方案6】:

          查看此sample.. 它解释了如何使用资源库保存照片..

          你甚至可以使用..

          UIImageWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo);
          

          查看他的链接How to save picture to iPhone photo library?

          【讨论】:

          • 我已经尝试过这些并且结果相同。有没有可能是因为我之前从当地图书馆拍照并且没有很好地关闭它或类似的东西?我可以看到我正在获取的照片,但无法保存。我绝望了……
          • 我已经解决了,问题不在于这段代码 sn-p。我已经在上面发布了确切的问题。谢谢。
          猜你喜欢
          • 1970-01-01
          • 2012-02-14
          • 1970-01-01
          • 1970-01-01
          • 2010-09-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多