Swift简单实现URL生成二维码,并保存到本地相册

来源:互联网 发布:通过网线共享网络 编辑:程序博客网 时间:2024/05/21 07:58

根据项目的需求,所以这里主要介绍一下由链接生成的二维码,长按二维码,截取二维码部分保存到本地相册中。
最初我想用UIImageWriteToSavedPhotosAlbum方法直接把生成的二维码存入相册中,但是发现保存失败,感觉应该是类型问题出的错,所以我用了截屏的方法。

override func viewWillAppear(animated: Bool) {        qrCodeImageView.image = createQRForString(url,qrImageName: "QRCoreImage")    }    //创建二维码图片    func createQRForString(qrString: String?, qrImageName: String?) -> UIImage?{            let stringData = sureQRString.dataUsingEncoding(NSUTF8StringEncoding,                allowLossyConversion: false)            // 创建一个二维码的滤镜            let qrFilter = CIFilter(name: "CIQRCodeGenerator")!            qrFilter.setValue(stringData, forKey: "inputMessage")            qrFilter.setValue("H", forKey: "inputCorrectionLevel")            let qrCIImage = qrFilter.outputImage            // 创建一个颜色滤镜,黑白色            let colorFilter = CIFilter(name: "CIFalseColor")!            colorFilter.setDefaults()            colorFilter.setValue(qrCIImage, forKey: "inputImage")            colorFilter.setValue(CIColor(red: 0, green: 0, blue: 0), forKey: "inputColor0")            colorFilter.setValue(CIColor(red: 1, green: 1, blue: 1), forKey: "inputColor1")            // 返回二维码image            let codeImage = UIImage(CIImage: colorFilter.outputImage!            // 下面是将头像之类的图片放到二维码中            //            if let iconImage = UIImage(named: qrImageName!) {            //                let rect = CGRectMake(0, 0, codeImage.size.width, codeImage.size.height)            //                UIGraphicsBeginImageContext(rect.size)            //            //                codeImage.drawInRect(rect)            //                let avatarSize = CGSizeMake(rect.size.width * 0.25, rect.size.height * 0.25)            //                let x = (rect.width - avatarSize.width) * 0.5            //                let y = (rect.height - avatarSize.height) * 0.5            //                iconImage.drawInRect(CGRectMake(x, y, avatarSize.width, avatarSize.height))            //                let resultImage = UIGraphicsGetImageFromCurrentImageContext()            //            //                UIGraphicsEndImageContext()            //                return resultImage            //            }            return codeImage        }        return nil    }    override func viewDidLoad() {        super.viewDidLoad()        //添加长按事件        let upKeyGesture = UILongPressGestureRecognizer()        upKeyGesture.addTarget(self, action: "qrCodeButtonClicked:")        qrCodeButton.addGestureRecognizer(upKeyGesture)    }    //长按事件    func qrCodeButtonClicked(sender: UILongPressGestureRecognizer) {        if sender.state == UIGestureRecognizerState.Began{            // 开始截取二维码部分(设置截取大小)            UIGraphicsBeginImageContext(qrCodeImageView.bounds.size)             // 获得截取到的图像            let img : UIImage = UIGraphicsGetImageFromCurrentImageContext()             // 结束截取            UIGraphicsEndImageContext()             //将图片保存到本地            UIImageWriteToSavedPhotosAlbum(img, self, "image:didFinishSavingWithError:contextInfo:", nil)         }else if sender.state == UIGestureRecognizerState.Ended{            return        }    }    func image(image:UIImage,didFinishSavingWithError error:NSError?,contextInfo:AnyObject) {        if error != nil {            UIhelper.showToast("保存失败", view: self.view)        } else {            UIhelper.showToast("保存成功", view: self.view)        }    }

最后要注意的是,我在开始的时候,保存二维码,在本地相册中会同时保存两张,后来发现是长按方法执行了两次,所以进行了UIGestureRecognizerState的判断。

0 0
原创粉丝点击