当我将照片从照片库保存到文档时,当我阅读它时它是空白的
Posted
技术标签:
【中文标题】当我将照片从照片库保存到文档时,当我阅读它时它是空白的【英文标题】:When I save a photo from photo library to Documents it is blank when I read it 【发布时间】:2016-08-12 04:30:15 【问题描述】:我知道我一定在这段代码中遗漏了一些东西。如果它已经被问过,我不知道要搜索什么词。我搜索了文件夹中的已读图片空白或空。我知道它不是 nil,因为 Xcode 说对于那种类型 (UIImage) 它不能是 nil。
我可以使用 imagepicker 来获取图片并将其显示在 UIImageView 中。当我将 UIImage 保存到 Documents 文件夹中时,没有错误。但是,当我读取保存的图像并尝试在 UIImageView 中显示它时,图片为空白或空(它只显示视图的背景颜色。)
我可以将应用程序中内容文件夹中的一些图片复制到 Documents 文件夹中,并且它们可以正常显示。我浏览并在整个代码中添加了打印语句,以查看是否有地方代码被跳过。我什至编写了一个函数来列出 Documents 文件夹中的文件名。图片的名称在那里,但我要保存的图片的数据似乎没有写入。
func addNewPhoto()
gotAPicture = true
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary)
let picker = UIImagePickerController()
picker.modalPresentationStyle = .CurrentContext
picker.allowsEditing = false
picker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
picker.delegate = self
presentViewController(picker, animated: true, completion: nil)
func imagePickerControllerDidCancel(picker: UIImagePickerController)
dismissViewControllerAnimated(true, completion: nil)
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject])
var newImage: UIImage
if let possibleImage = info[UIImagePickerControllerEditedImage] as? UIImage
newImage = possibleImage
else if let possibleImage = info[UIImagePickerControllerOriginalImage] as? UIImage
newImage = possibleImage
else
return
let imageName = NSUUID().UUIDString + ".jpg"
let imagePath = getDocumentsDirectory().stringByAppendingPathComponent(imageName)
if let pictureData = UIImageJPEGRepresentation(newImage, 0.9)
pictureData.writeToFile(imagePath, atomically: true)
ChosenImage.image = newImage
picker.dismissViewControllerAnimated(true, completion: nil)
picker.delegate = nil
func getDocumentsDirectory() -> NSString
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let documentsDirectory = paths[0]
return documentsDirectory
我检查了代码,重写了它,然后从头开始。我什至在第 10 课(以及其他教程)中学习了来自 hackingwithswift.com 的编码示例。一旦我将 .allowsEditing 更改为 false,该课程就结束了。
好的,这是我用来显示图片的代码
@IBOutlet weak var ChosenImage: UIImageView!
而且,这是我用来读取 Documents 文件夹中图片的代码。它位于不同的视图控制器中,出口称为 mainImage。
let fm = NSFileManager.defaultManager()
let path = getDocumentsDirectory()
let items = try! fm.contentsOfDirectoryAtPath(path as String)
imageList.removeAll()
currentImage = 0
for item in items
if item.hasSuffix(".jpg")
imageList.append(item)
mainImage.image = UIImage(named: imageList[currentImage])
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.swipeRight(_:)))
swipeRight.direction = .Right
self.view.addGestureRecognizer(swipeRight)
let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.swipeLeft(_:)))
swipeLeft.direction = .Left
self.view.addGestureRecognizer(swipeLeft)
let swipeUp = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.swipeUp(_:)))
swipeUp.direction = .Up
self.view.addGestureRecognizer(swipeUp)
是什么导致 UIImage 的数据没有与文件名一起写入?我确定我错过了什么。 谢谢。
【问题讨论】:
【参考方案1】:你不应该对像let image = UIImage(named: <#imageName#>)
这样的图像使用这种初始化,因为这种初始化更好地只用于存在于你的应用程序包中的图像。我想你会使用像 let image = UIImage(contentsOfFile: <#imagePath#>)
这样的方法来清除你加载图像,你会更早地坚持。
但是,你的问题很简单,当你获取目录的内容时,输出会是这样的
21AB15AE-D69A-416B-AE93-6DC334E41F91.jpg
6CB9FA7B-FF20-4D60-B7EB-B44300C85AF9.jpg
86508AEC-AE8B-4FB8-8CA5-307DF58E959A.jpg
9C90944E-87EE-4B41-BA99-A6A8171402AC.jpg
AC2BC0D4-CA51-4A24-9D80-87F8736A72A7.jpg
B0C772A6-8354-4C7C-B23B-7414123E52FB.jpg
B10FE95C-E017-411C-BAD1-986A6090F463.jpg
DCB4B0C9-DDB4-4188-8DF7-0ABFD2FD76CB.jpg
EEDDCABD-A707-4CAA-9AF7-5009EAA57FA8.jpg
等等...
这导致了主要问题 - 您尝试加载图像仅通过引用它们的名称,结果产生 nil-image。要加载图像,您应该指定图像的完整路径(完整路径适用于 contentsOfURL 和 named 初始化程序)
我会创建一个简单的项目,你可以得到它here
【讨论】:
在查看您的简单项目之前,我决定看看我是否理解您在告诉我的内容。在您的帮助下,我想出了一个可以在我的代码中使用的小函数。 func doTheImage() let path = getDocumentsDirectory() let imageWhere = (path as String) + "/" + imageList[currentImage] let image = UIImage(contentsOfFile: imageWhere) print(imageWhere) mainImage.image = image 美好的。谢谢! (它肯定没有正确显示格式。:-/)以上是关于当我将照片从照片库保存到文档时,当我阅读它时它是空白的的主要内容,如果未能解决你的问题,请参考以下文章
我正在尝试制作像应用程序一样的照片库,但是当我将位图对象添加到arraylist时,我将钳制目标GC堆从128MB到128MB