2017-08-17 72 views
0

正如我所知,這是Simple Approch將其保存在照片庫中。但它可以保存自定義文件名。將UIImage保存爲Xamarin.iOS的照片庫目錄中的jpg文件

var someImage = UIImage.FromFile("someImage.jpg"); 
someImage.SaveToPhotosAlbum((image, error) => { 
    var o = image as UIImage; 
    Console.WriteLine("error:" + error); 
}) 

但是我想用文件名.jpg將它保存在照片庫中。

我嘗試了這麼多的代碼,但沒有任何幫助。

代碼1:

var imageName = "/" + dicomId.ToString() + ".jpg"; 

var documentsDirectory = Environment.GetFolderPath 
        (Environment.SpecialFolder.Personal); 

string jpgFilename = System.IO.Path.Combine(documentsDirectory, imageName); // hardcoded filename, overwritten each time 
NSData imgData = dicomImage.AsJPEG(); 
NSError err = null; 
if (imgData.Save(jpgFilename, false, out err)) 
{ 
    Console.WriteLine("saved as " + jpgFilename); 
} 
else 
{ 
    Console.WriteLine("NOT saved as " + jpgFilename + " because" + err.LocalizedDescription); 
} 

這部分代碼去,如果條件,但它不能保存圖像。

代碼2:

如果使用代碼

var documentsDirectoryPath = NSSearchPath.GetDirectories(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomain.User, true)[0]; 

的這一部分它給你無權保存圖像。

我嘗試了很多谷歌和SO的東西,但沒有任何東西可以幫助我。

編輯:

的info.plist

enter image description here

任何幫助,將不勝感激。

+0

你在plist文件添加適當的權限? 特別隱私 - 照片庫使用說明 –

+0

@saketkumar我已經添加了權限.. – Ironman

+0

在你的標題你說你想保存PNG文件,有問題,你說,你想用JPG保存它。 你想以哪種格式保存它? –

回答

0

如何使用UIImage.SaveToPhotosAlbum()

用法是一樣的東西:

image.SaveToPhotosAlbum((uiImage, nsError) => 
{ 
    if (nsError != null) 
     // do something about the error.. 
    else 
     // image should be saved 
}); 

確保您所請求的權限您嘗試保存之前。

PHPhotoLibrary.RequestAuthorization(status => 
{ 
    switch (status) 
    { 
     case PHAuthorizationStatus.Restricted: 
     case PHAuthorizationStatus.Denied: 
      // nope you don't have permission 
      break; 
     case PHAuthorizationStatus.Authorized: 
      // yep it is ok to save 
      break; 
    } 
}); 

編輯:如果你想要更多的控制,你需要使用PHPhotosLibrary,這是一個可怕的API ...

var library = PHPhotoLibrary.SharedPhotoLibrary; 

var albumName = "MyPhotos"; 

var fetchOptions = new PHFetchOptions(); 
fetchOptions.Predicate = NSPredicate.FromFormat($"title = {albumName}"); 
var assetsCollections = PHAssetCollection.FetchAssetCollections(
    PHAssetCollectionType.Album, PHAssetCollectionSubtype.Any, fetchOptions); 

var collection = assetsCollections.firstObject as PHAssetCollection; 

library.PerformChanges(() => { 
    var options = new PHAssetResourceCreationOptions(); 
    options.OriginalFilename = "filename.jpg"; 
    var createRequest = PHAssetCreationRequest.CreationRequestForAsset(); 
    createRequest.AddResource(PHAssetResourceType.FullSizePhoto, image.AsJPEG(1), options); 

    // if you want to save to specific album... otherwise just remove these three lines 
    var placeholder = createRequest.PlaceholderForCreatedAsset; 
    var albumChangeRequest = PHAssetCollectionChangeRequest.ChangeRequest(collection); 
    albumChangeRequest.AddAssets(new PHObject[] { placeholder }); 
}, 
(ok, error) => { 
    if (error != null) 
    { 
     // someone set up us the bomb 
    } 
}); 
相關問題