美文网首页
IOS使用PicturePickerDelegate读取照片

IOS使用PicturePickerDelegate读取照片

作者: 美词开发笔记 | 来源:发表于2023-05-09 09:59 被阅读0次

    IOS使用PicturePickerDelegate读取手机的照片

    1.建立类实现代理PicturePickerDelegate

    class WordEditController: UIViewController,PicturePickerDelegate{

    //调用系统照片功能

        @objc func pictuteChioce() {

            if !UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.photoLibrary) {

                //  print("无法选择照片")

                return

            }

            //显示照片窗口

            let picker = UIImagePickerController()

            //拍照 默认类型是照片选择

            //.photoLibrary系统的枚举类型

            picker.sourceType = .photoLibrary

            // 设置代理

            picker.delegate=self

            //不允许编辑照片

            picker.allowsEditing=false

            present(picker,animated:true) {

            }

        }

    //实现代理的方法

    //拍照、图片、图片修改都回调这个方法

        func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

                var scaleImage:UIImage?

    //读取选择的图片,info[UIImagePickerController.InfoKey.editedImage]是编辑后的图片

    //info[UIImagePickerController.InfoKey.originalImage]是原始图片

                let image = info[UIImagePickerController.InfoKey.editedImage] as? UIImage

                if let imageTemp = image {

                    scaleImage = imageTemp.scaleToWith(width:600)

                }

    //判断是否可以使用,特殊情况选择的图片无法使用

               if scaleImage ==  nil{

                dismiss(animated: true, completion: nil)

                let picAlertController:UIAlertController=UIAlertController(title:"此图不可用,请重新选择",message:nil,preferredStyle: .alert)                          let closeAction =UIAlertAction(title:"好的",style: .cancel,handler: { action in

                    return

                })

                 picAlertController.addAction(closeAction)

                 picAlertController.dismiss(animated:true) {

                }

                self.present(picAlertController,animated:true)

                return

            }

            //记录选择的照片,更改界面显示

            自己的图片控件.uiImage = scaleImage

            //自定义方法,保存图像到本应用目录

            savePhotoInDocument(docImage:scaleImage!)

            //关闭系统照片视图

            dismiss(animated: true, completion: nil)

        }

    private func savePhotoInDocument(docImage:UIImage){

            //保存到相册或者自己的目录,UIImageWriteToSavedPhotosAlbum调用后面的方法image()

           // UIImageWriteToSavedPhotosAlbum(docImage, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil)

            //保存到自己的目录

            let imageName:String = "img_" + UUID().uuidString + ".png"

            let fileManager =FileManager.default

            let documentPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first! as NSString

          let fileFullName = documentPath + imageName

          //压缩图片 到50K

            let compressData:Data=  docImage.compressImageOnlength(maxLength:50)!

            try? compressData.write(to:URL(fileURLWithPath: fileFullName))

        }

    //保存到相册

        @objc func image(_ image: UIImage, didFinishSavingWithError error: NSError?, contextInfo: UnsafeRawPointer) {

            if let error = error {

                let ac = UIAlertController(title: "图片保存失败", message: error.localizedDescription, preferredStyle: .alert)

                ac.addAction(UIAlertAction(title:"好的",style: .default))

                present(ac,animated:true)

            }else{

                let ac =UIAlertController(title:"截图已保存到照片",message:nil,preferredStyle: .alert)

                ac.addAction(UIAlertAction(title:"好的",style: .default))

                present(ac,animated:true)

            }

        }

    }

    相关文章

      网友评论

          本文标题:IOS使用PicturePickerDelegate读取照片

          本文链接:https://www.haomeiwen.com/subject/bgrrsdtx.html