欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

 Swift从ALAsset中获取照片原图转NSData和相关用法

程序员文章站 2024-01-15 19:47:22
...

直接复制图片的字节数据(拿到原图数据)

let representation = resulttll?.defaultRepresentation() //resulttll为ALAsset属性
    
let imageBuffer = UnsafeMutablePointer<UInt8>.allocate(capacity: Int((representation?.size())!))
    
let bufferSize = representation?.getBytes(imageBuffer, fromOffset: Int64(0),
                                             length: Int((representation?.size())!), error: nil)

let datall:NSData =  NSData(bytesNoCopy:imageBuffer ,length:bufferSize!, freeWhenDone:true)

缩略图 (遍历相册,自定义相册时可以使用)
注意: thumbnail(小正方形的缩略图); aspectRatioThumbnail(按原始资源长宽比例的缩略图)

assetsLibrary.enumerateGroupsWithTypes(ALAssetsGroupAll, usingBlock: { (group, stop) in
        if group != nil {
            let model = AlbumModel()
            if group?.value(forProperty: ALAssetsGroupPropertyName) != nil {
                model.albumName = group?.value(forProperty: ALAssetsGroupPropertyName)as!String
            }else{
                model.albumName = ""
            }
            model.imageArray = NSMutableArray()
            //倒叙
            group?.enumerateAssets(options: NSEnumerationOptions.reverse, using: { (result, index, stop) in
                if result != nil {
                    let imageModel = ImageModel()
                    imageModel.isSelected = false
                    imageModel.image = UIImage(cgImage: (result?.thumbnail().takeUnretainedValue())!)
                    imageModel.pictureRest = result
                    model.imageArray.add(imageModel)
                    
                    self.currentImageArray = model.imageArray
                }
            })
            
            hud.hide(animated: true)
            self.dataArray.add(model)
        }else{
            for i in 0 ..< self.dataArray.count {
                let model = self.dataArray[i] as!AlbumModel
                self.titleArray.add(model.albumName)
                if model.albumName == "相机胶卷" {
                    self.selectedAlbumModel = self.dataArray[i] as! AlbumModel
                    self.currentIndex = i
                    self.currentImageArray = self.selectedAlbumModel.imageArray
                }
            }
            hud.hide(animated: true)
            self.albumTableView.dataArray = self.titleArray
            self.collectionView.reloadData()
        }
    }) { (error) in
        print("\(error)")
    }