回调UIImage在iOS Swift中为零?

问题描述 投票:-1回答:1

我有回调UIImage。 VNDocumentCameraViewController完成调用后,图像将通过回调返回到viewcontroller

public var ImageCalled: ((UIImage?) -> Void)?

这里是VNDocumentCameraViewController完成了方法

     public func documentCameraViewController(_ controller: VNDocumentCameraViewController, didFinishWith scan: VNDocumentCameraScan) {
    guard scan.pageCount >= 1 else {
        controller.dismiss(animated: true)
        return
    }

    let originalImage = scan.imageOfPage(at: 0)
    self.imageView.image = originalImage
    var newImage = compressedImage(originalImage)
    print("new image::\(newImage.size)")
    imageNew = newImage
    print("image new", imageNew!)

    imageFromFile { (imm) in

        newImage = imm!
    }
    // callback
    ImageCalled!(newImage)

    controller.dismiss(animated: true)

}

并且在viewcontroller中调用了回调:

     vc1.ImageCalled = { (imageReturn) in

        print("image return", imageReturn)

    }

ScannerViewController代码:

 public class ScannerViewController: UIViewController, VNDocumentCameraViewControllerDelegate {

public var clientView: UIViewController?
public var imageCallBack: ((UIImage) -> ())?
public var ImageCalled: ((UIImage?) -> Void)?
public var imageDataV: ((Data?) -> Void)?


@IBOutlet weak var imageView: UIImageView!
//    @IBOutlet weak var textView: UITextView!
 var imageNew: UIImage?
 var textVal = [VNRecognizedTextObservation]()
 var textRecognitionRequest = VNRecognizeTextRequest(completionHandler: nil)
  private let textRecognitionWorkQueue = DispatchQueue(label: "MyVisionScannerQueue", qos: .userInitiated, attributes: [], autoreleaseFrequency: .workItem)

  public init() {
             super.init(nibName: "ScannerViewController", bundle: Bundle(for: ScannerViewController.self))
         }

         required init?(coder aDecoder: NSCoder) {
             fatalError("init(coder:) has not been implemented")
         }

override public func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
  //        loadScanner()


}


 public func loadScanner(){
   let scannerViewController = VNDocumentCameraViewController()
   scannerViewController.delegate = self
   present(scannerViewController, animated: true)
 }

 @IBAction func btnTakePicture(_ sender: Any) {

     loadScanner()
  }


@IBAction func saveBtn(_ sender: Any) {

  //        let vc = A8Scan(self)
 //        vc.hideController()
    if let img = imageView.image {

        imageNew = img
        print("image new1", imageNew!)
        ImageCalled!(imageNew)
        print("call back",imageCallBack!(imageNew!))

    }

    self.removeFromParent()
    self.view.removeFromSuperview()
}


private func processImage(_ image: UIImage) {
    imageView.image = image
    print("ia:::\(String(describing: imageView.image))")
 //        recognizeTextInImage(image)
 }

 public func imageFromFile(result: @escaping (_ image: UIImage?) -> Void){

        //the image

    if imageNew != nil {

        result(imageNew)
        print("result", result(imageNew))

        }
        else{
            //callback nil so the app does not pause infinitely if
            //the error != nil
        result(nil)
        }

}



public func documentCameraViewController(_ controller: VNDocumentCameraViewController, didFinishWith scan: VNDocumentCameraScan) {
    guard scan.pageCount >= 1 else {
        controller.dismiss(animated: true)
        return
    }

    let originalImage = scan.imageOfPage(at: 0)
    self.imageView.image = originalImage
    var newImage = compressedImage(originalImage)
    print("new image::\(newImage.size)")
    imageNew = newImage
    print("image new", imageNew!)

    imageFromFile { (imm) in

        newImage = imm!
    }
    // callback
    ImageCalled!(newImage)

    controller.dismiss(animated: true)

}

public func documentCameraViewController(_ controller: VNDocumentCameraViewController, didFailWithError error: Error) {
    print(error)
    controller.dismiss(animated: true)
}

public func documentCameraViewControllerDidCancel(_ controller: VNDocumentCameraViewController) {
    controller.dismiss(animated: true)
}

func compressedImage(_ originalImage: UIImage) -> UIImage {
    guard let imageData = originalImage.jpegData(compressionQuality: 1),

        let reloadedImage = UIImage(data: imageData) else {

            return originalImage
    }
    return reloadedImage
 }


 }//class

如何从回调中获取图片?任何帮助,不胜感激请..

ios swift callback uiimageview uiimage
1个回答
0
投票

尝试在您当前的VC上分配扫描仪控制器的基类,

class ViewController: ScannerViewController {

   @IBOutlet weak var imageViewVC: UIImageView!


 // then you can get the image directly from your imageView object when you need you can directly access

      imageViewVC = imageView

  }
© www.soinside.com 2019 - 2024. All rights reserved.