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

根据项目的需求,所以这里主要介绍一下由链接生成的二维码,长按二维码,截取二维码部分保存到本地相册中。
最初我想用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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值