У меня есть обратный вызов 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 code:
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
Как получить изображение из обратного вызова? Любая помощь высоко ценится пожалуйста.