我正在制作一个使用AVFoundation拍照的应用程序,我想将它们保存到自定义相册中,然后查询并显示在我的应用程序中。(除非用户希望,否则我不希望它们出现在一般的照片胶卷中)我真的找不到任何东西可以显示在Swift中如何做到这一点……或根本没有。我应该有其他方法吗?
我在SO上找到了这个示例,但是对我来说这没有意义,我无法使其正常工作。
func savePhoto() {
var albumFound : Bool = false
var assetCollection: PHAssetCollection!
var photosAsset: PHFetchResult!
var assetThumbnailSize:CGSize!
// Create the album if does not exist (in viewDidLoad)
if let first_Obj:AnyObject = collection.firstObject{
//found the album
self.albumFound = true
self.assetCollection = collection.firstObject as PHAssetCollection
}else{
//Album placeholder for the asset collection, used to reference collection in completion handler
var albumPlaceholder:PHObjectPlaceholder!
//create the folder
NSLog("\nFolder \"%@\" does not exist\nCreating now...", albumName)
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
let request = PHAssetCollectionChangeRequest.creationRequestForAssetCollectionWithTitle(albumName)
albumPlaceholder = request.placeholderForCreatedAssetCollection
},
completionHandler: {(success:Bool, error:NSError!)in
NSLog("Creation of folder -> %@", (success ? "Success":"Error!"))
self.albumFound = (success ? true:false)
if(success){
let collection = PHAssetCollection.fetchAssetCollectionsWithLocalIdentifiers([albumPlaceholder.localIdentifier], options: nil)
self.assetCollection = collection?.firstObject as PHAssetCollection
}
})
}
let bundle = NSBundle.mainBundle()
let myFilePath = bundle.pathForResource("highlight1", ofType: "mov")
let videoURL:NSURL = NSURL.fileURLWithPath(myFilePath!)!
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0), {
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
//let createAssetRequest = PHAssetChangeRequest.creationRequestForAssetFromImage
let createAssetRequest = PHAssetChangeRequest.creationRequestForAssetFromVideoAtFileURL(videoURL)
let assetPlaceholder = createAssetRequest.placeholderForCreatedAsset
let albumChangeRequest = PHAssetCollectionChangeRequest(forAssetCollection: self.assetCollection, assets: self.photosAsset)
albumChangeRequest.addAssets([assetPlaceholder])
}, completionHandler: {(success, error)in
dispatch_async(dispatch_get_main_queue(), {
NSLog("Adding Image to Library -> %@", (success ? "Sucess":"Error!"))
//picker.dismissViewControllerAnimated(true, completion: nil)
})
})
})
}
任何帮助/说明都将非常棒!
这是我的方法:
在顶部:
import Photos
var image: UIImage!
var assetCollection: PHAssetCollection!
var albumFound : Bool = false
var photosAsset: PHFetchResult!
var assetThumbnailSize:CGSize!
var collection: PHAssetCollection!
var assetCollectionPlaceholder: PHObjectPlaceholder!
创建相册:
func createAlbum() {
//Get PHFetch Options
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "title = %@", "camcam")
let collection : PHFetchResult = PHAssetCollection.fetchAssetCollectionsWithType(.Album, subtype: .Any, options: fetchOptions)
//Check return value - If found, then get the first album out
if let _: AnyObject = collection.firstObject {
self.albumFound = true
assetCollection = collection.firstObject as! PHAssetCollection
} else {
//If not found - Then create a new album
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
let createAlbumRequest : PHAssetCollectionChangeRequest = PHAssetCollectionChangeRequest.creationRequestForAssetCollectionWithTitle("camcam")
self.assetCollectionPlaceholder = createAlbumRequest.placeholderForCreatedAssetCollection
}, completionHandler: { success, error in
self.albumFound = success
if (success) {
let collectionFetchResult = PHAssetCollection.fetchAssetCollectionsWithLocalIdentifiers([self.assetCollectionPlaceholder.localIdentifier], options: nil)
print(collectionFetchResult)
self.assetCollection = collectionFetchResult.firstObject as! PHAssetCollection
}
})
}
}
保存照片时:
func saveImage(){
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
let assetRequest = PHAssetChangeRequest.creationRequestForAssetFromImage(self.image)
let assetPlaceholder = assetRequest.placeholderForCreatedAsset
let albumChangeRequest = PHAssetCollectionChangeRequest(forAssetCollection: self.assetCollection, assets: self.photosAsset)
albumChangeRequest!.addAssets([assetPlaceholder!])
}, completionHandler: { success, error in
print("added image to album")
print(error)
self.showImages()
})
}
显示该相册中的图像:
func showImages() {
//This will fetch all the assets in the collection
let assets : PHFetchResult = PHAsset.fetchAssetsInAssetCollection(assetCollection, options: nil)
print(assets)
let imageManager = PHCachingImageManager()
//Enumerating objects to get a chached image - This is to save loading time
assets.enumerateObjectsUsingBlock{(object: AnyObject!,
count: Int,
stop: UnsafeMutablePointer<ObjCBool>) in
if object is PHAsset {
let asset = object as! PHAsset
print(asset)
let imageSize = CGSize(width: asset.pixelWidth, height: asset.pixelHeight)
let options = PHImageRequestOptions()
options.deliveryMode = .FastFormat
imageManager.requestImageForAsset(asset, targetSize: imageSize, contentMode: .AspectFill, options: options, resultHandler: {(image: UIImage?,
info: [NSObject : AnyObject]?) in
print(info)
print(image)
})
}
}
问题内容: 我已经创建了一个将捕获图片并保存在sdcard文件夹中的android应用程序,现在我想使用自定义名称保存图片。 这是我用来捕获图像并将其保存在sd卡文件夹中的代码,请帮助我以特定名称保存图像,例如:android.jpeg 问题答案: 您还需要在Android清单中添加权限。 该代码段将使用名称保存内部内容
问题内容: 我目前正在尝试将自定义Swift类保存到NSUserDefaults。这是我的游乐场代码: 运行代码时,出现以下错误 执行被中断,原因:信号SIGABRT。 在最后一行(…) 在带有消息的应用程序中,相同的代码也会崩溃 “属性列表对于格式无效:200(属性列表不能包含’CFType’类型的对象)” 有人可以帮忙吗?我在Maverick上使用Xcode 6.0.1。谢谢。 问题答案: 正
所以我用下面的方法设置了摄像头- 如您所见,我在摄像机参数上使用了setRoation()来实际指定图像方向,并在摄像机本身上使用了setDisplayOriation()来处理表面预览中的方向更改。(注释和未注释的代码似乎都没有保留方向。当我检查数据时,它返回0) 之后,在回调中,我甚至尝试使用矩阵保存具有方向的图像。 实际问题 > 当我在肖像模式下拍照时,一切正常。它看起来像是被拿走了。 但是
问题内容: 我正在尝试从图像样本缓冲区中将一些元数据与图像一起保存。 我需要: 将图像从元数据旋转到方向 从元数据中删除方向 将拍摄日期保存到元数据 将带有元数据的图像保存到文档目录 我尝试从数据创建UIImage,但这会剥夺元数据。我尝试使用数据中的CIImage保留元数据,但无法旋转它,然后将其保存到文件中。 这是我保存图像的代码。 问题答案: 最后,我弄清楚了如何使所有东西按我需要的方式工作
问题内容: 我有一个新闻和一个消息。所述含有选择加入到阵列时teamObjects的的tableView。我想将此数组添加到其中,以便可以从其中包含需要teamObjects的url请求的访问它们。但是我不断得到: “试图为关键团队插入非财产列表对象(“”) 如果有比将其存储在更好的方法,我愿意接受其他建议 方法 我的对象 问题答案: 实际上,您将需要将自定义对象归档到其中,然后将其保存到用户默认
问题内容: 如何从 自定义 相册中获取 所有图像 ? __ 该代码块仅获取其中一些。谢谢。 -> 的类型是 问题答案: 对于Swift 4 使用这个答案为自己编辑了一点。 对于Swift 2.1