图片下载和保存

根据图片的内容,类型,大小,分别进行保存并统计数量
直接上代码,之后进行解释和说明

@IBAction func saveImages(sender: UIBarButtonItem) {
        var emojis = 0
        var gazous = 0
        var photos = 0
        var executings = [Bool]()
        var complete = true
        for _ in saveImages {
            executings.append(true)
        }
        for (i, URL) in saveImages.enumerate() {
            Alamofire.request(.GET, URL.absoluteString).responseData({ (req, response, res) -> Void in
                defer {
                    executings[i] = false
                }
                switch res {
                case .Failure(_, _): ()
                case .Success(let data):
                    guard let image = UIImage(data: data) else {
                        return
                    }
                    switch self.imageType(data) {
                    case .Gif:
                        let imageId = "\(self.MD5(data))-\(data.length).gif"

                        if image.size.width <= 20 && image.size.height <= 20 {
                            self.saveImageNameInRealm(Deco.EmojiId, imageID: imageId)
                            self.saveImageInFolder(Deco.EmojiId, imageID: imageId, data: data)
                            emojis++

                        } else {
                            self.saveImageNameInRealm(Deco.GazouId, imageID: imageId)
                            self.saveImageInFolder(Deco.GazouId, imageID: imageId, data: data)
                            gazous++
                        }
                    default:
                        UIImageWriteToSavedPhotosAlbum(image, self, "image:didFinishSavingWithError:contextInfo:", nil)
                        photos++
                    }
                }
            })
        }
        while executings.filter({ $0 }).count > 0 {
            NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate(timeIntervalSinceNow:0.01))
        }
        let alertView = UIAlertController(title: "保存が完了しました", message: "绘文字 : \(emojis)\n图片 : \(gazous)\n相册照片 : \(photos)\n", preferredStyle: .Alert)

        let okAction = UIAlertAction(title: "OK", style: .Default, handler: { (action) -> Void in
            self.dismissViewControllerAnimated(true, completion: nil)
        })
        alertView.addAction(okAction)
        self.presentViewController(alertView, animated: true, completion:nil)
    }

首先,代码中的一些函数方法我已经在之前的小结文章中涉及到了,方法名也是一样的,如果有个别函数或者方法不明白的话,可以翻阅以前的文章。
这里做一个总结,对图片的类型和属性进行一个判断并且根据不同的类型,存放到不同的文件夹中,在统计图片各个类型数量的时候,由于下载图片是子线程中进行的,我们在做统计的时候必须要在主线程中进行,我实现的方法就是利用循环和NSRunLoop 如果数组内部有没有下载完成的图片则不会执行后面的套alertView的方法。全部都下载完成后,代码再次运行,这里NSRunLoop 那行代码有让代码停止的神奇功效!相当方便。
下面贴出保存时候的代码:

/// 图片保存到本地
    func saveImageInFolder(decoFolder: String, imageID: String, data: NSData) {
        let folderId = self.getDecoFolders(decoFolder).first!.identifier
        let folderPath = Path.Document.directory.stringByAppendingPathComponent("decos/\(decoFolder)/\(folderId)")
        try! NSFileManager.defaultManager().createDirectoryAtPath(folderPath, withIntermediateDirectories: true, attributes: nil)
        let filePath = folderPath.stringByAppendingPathComponent(imageID)
        data.writeToFile(filePath, atomically: true)
    }
    /// 图片保存到相册
    func  image(image: UIImage, didFinishSavingWithError error: NSError!, contextInfo: UnsafeMutablePointer<Void>) {
        if error != nil {
            LOG(error.code)
        } else {
            LOG("OK")
        }
    }

ok!完成!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值