![](/img/trans.png)
[英]iOS: I get many `UIImage` from network, how can I know their `aspect ratio`?
[英]iOS & Swift - How can I get and save a UIImage from the user?
我正在為iOS編寫一個Swift應用程序。 我想知道如何從用戶的相機膠卷(或者他們現在稱之為的任何東西)獲取圖像,並將其保存在應用程序中的本地,以便我以后可以參考。 怎么會這樣呢? 作為一個例子,假設我想獲取圖像並將其設置為故事板中UIImageView的圖像。
這正是UIImagePickerController
與NSUserDefaults
結合使用的NSUserDefaults
。
對你來說,這將是一個兩部分的任務。 首先,您必須使用UIImagePickerController
捕獲圖像,然后將其存儲在照片庫中,或者使用NSUserDefaults
將其存儲在設備上。
要使用NSUserDefaults
存儲圖像,請參閱此問題 。
這是我的組合。
保存圖片:
let imageData = NSData(data:UIImagePNGRepresentation(pickedimage))
let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
var docs: String = paths[0] as! String
let fullPath = docs.stringByAppendingPathComponent("yourNameImg.png")
let result = imageData.writeToFile(fullPath, atomically: true)
print(fullPath)
獲取圖片:
let nsDocumentDirectory = NSSearchPathDirectory.DocumentDirectory
let nsUserDomainMask = NSSearchPathDomainMask.UserDomainMask
if let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
{
if paths.count > 0
{
if let dirPath = paths[0] as? String
{
let readPath = dirPath.stringByAppendingPathComponent("yourNameImg.png")
let image = UIImage(contentsOfFile: readPath)
UploadImagePreview.image = image
}
}
}
我們可以嘗試使用Photos Framework來獲取上次保存的圖像。
var fetchOptions: PHFetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]
var fetchResult = PHAsset.fetchAssetsWithMediaType(PHAssetMediaType.Image, options: fetchOptions)
if (fetchResult.firstObject != nil) {
var lastAsset: PHAsset = fetchResult.lastObject as! PHAsset
PHImageManager.defaultManager().requestImageForAsset(lastAsset, targetSize: self.UploadImagePreview.bounds.size, contentMode: PHImageContentMode.AspectFill, options: PHImageRequestOptions(), resultHandler: { (result, info) -> Void in
self.UploadImagePreview.image = result
})
}
Ray Wenderlich有一個很棒的教程 ,可以使用UIImagePickerController
選擇圖像,然后使用AssetsLibrary
保存到相冊。
還有關於使用圖像過濾器的信息比本教程中要求的更多。
獲得UIImage對象后,可以使用以下代碼將圖像保存在doc目錄中
let imageData = NSData(data:UIImagePNGRepresentation(wineImage.image))
let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
var docs: String = paths[0] as! String
let fullPath = docs.stringByAppendingPathComponent("yourNameImg.png")
let result = imageData.writeToFile(fullPath, atomically: true)
一旦你讓所選圖像使用這種文件管理器方法,你肯定應該像Brian提到的那樣使用UIImagePickerController
。 我不建議使用NSUserDefaults
來存儲圖像,因為它違反Apple指南 :
let imageData = UIImagePNGRepresentation(selectedImage)
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let imagePath = paths.stringByAppendingPathComponent("cached.png")
if !imageData.writeToFile(imagePath, atomically: false)
{
println("not saved")
} else {
println("saved")
NSUserDefaults.standardUserDefaults().setObject(imagePath, forKey: "imagePath")
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.