From e9df2e954c8f89619f9882b271c98e87b4631d9c Mon Sep 17 00:00:00 2001 From: Mustafa Merza <mustafa.merza95@gmail.com> Date: Mon, 12 Aug 2024 15:03:03 +0300 Subject: [PATCH] - Added compressing scanned item after being rendered in scanner screen. --- .../Repositores/ScanSessionsRepository.swift | 13 ++---- .../Managers/ImageCompressManager.swift | 44 +++++++++++++++++++ .../MultiPageScanSession.swift | 21 +++++++++ .../Scan/ScannerViewController.swift | 11 ++++- 4 files changed, 77 insertions(+), 12 deletions(-) diff --git a/MiniScanner/Features/ScanSession/Data/Repositores/ScanSessionsRepository.swift b/MiniScanner/Features/ScanSession/Data/Repositores/ScanSessionsRepository.swift index f2b666b..88c31b4 100644 --- a/MiniScanner/Features/ScanSession/Data/Repositores/ScanSessionsRepository.swift +++ b/MiniScanner/Features/ScanSession/Data/Repositores/ScanSessionsRepository.swift @@ -184,16 +184,9 @@ extension ScanSessionsRepository { let compressedOriginalImage = ImageCompressManager.compress(image: originalImage) let compressedRenderedImage = ImageCompressManager.compress(image: renderedImage) - let newScannedItem = ScannedItem(originalImage: compressedOriginalImage, - renderImage: compressedRenderedImage, - quad: item.quad, - colorOption: item.colorOption, - type: .local) - - newScannedItem.rotation = item.rotation - newScannedItem.signaturePosition = item.signaturePosition - newScannedItem.size = item.size - newScannedItem.rotate = item.rotate + let newScannedItem = item.createItem(originalImage: compressedOriginalImage, + renderedImage: compressedRenderedImage, + type: .local) if let imageUrl = item.newOriginalImage { try? FileManager.default.removeItem(at: imageUrl) diff --git a/MiniScanner/Managers/ImageCompressManager.swift b/MiniScanner/Managers/ImageCompressManager.swift index 546b009..c07882a 100644 --- a/MiniScanner/Managers/ImageCompressManager.swift +++ b/MiniScanner/Managers/ImageCompressManager.swift @@ -10,9 +10,15 @@ import Foundation class ImageCompressManager { + @Inject private static var deleteScanSessionUseCase: DeleteScanSessionUseCase + class func compress(image: UIImage) -> UIImage { wxCompress(image: image) } + + class func compress(scannedItem: ScannedItem) -> ScannedItem { + wxCompress(scannedItem: scannedItem) + } } extension ImageCompressManager { @@ -20,4 +26,42 @@ extension ImageCompressManager { private class func wxCompress(image: UIImage) -> UIImage { image.wxCompress() } + + private class func wxCompress(scannedItem: ScannedItem) -> ScannedItem { + + guard let originalImage = scannedItem.newOriginalImage?.retrieveImage(), + let renderedImage = scannedItem.newRenderedImage?.retrieveImage() + + else { return scannedItem } + + // Remove the scanned item old files + removeScannedItemFile(scannedItem: scannedItem) + + let compressedOriginalImage = compress(image: originalImage) + let compressedRenderedImage = compress(image: renderedImage) + + let newScannedItem = scannedItem.createItem(originalImage: compressedOriginalImage, + renderedImage: compressedRenderedImage, + type: scannedItem.type) + + if let imageUrl = scannedItem.newOriginalImage { + try? FileManager.default.removeItem(at: imageUrl) + } + + if let imageUrl = scannedItem.newRenderedImage { + try? FileManager.default.removeItem(at: imageUrl) + } + + return newScannedItem + } + + private class func removeScannedItemFile(scannedItem: ScannedItem) { + + let scanSession = ScanSession(id: UUID(), + name: "", + creationDate: .now, + scannedItems: [scannedItem]) + + deleteScanSessionUseCase.execute(with: scanSession) + } } diff --git a/MiniScanner/Supporting Files/Frameworks/CustomWeScan/MultiPageSession/MultiPageScanSession.swift b/MiniScanner/Supporting Files/Frameworks/CustomWeScan/MultiPageSession/MultiPageScanSession.swift index 897ea5d..318bc3b 100644 --- a/MiniScanner/Supporting Files/Frameworks/CustomWeScan/MultiPageSession/MultiPageScanSession.swift +++ b/MiniScanner/Supporting Files/Frameworks/CustomWeScan/MultiPageSession/MultiPageScanSession.swift @@ -140,6 +140,27 @@ extension ScannedItem: Equatable { } } +extension ScannedItem { + + func createItem(originalImage: UIImage, + renderedImage: UIImage, + type: ScannedItemType) -> ScannedItem { + + let newScannedItem = ScannedItem(originalImage: originalImage, + renderImage: renderedImage, + quad: quad, + colorOption: colorOption, + type: type) + + newScannedItem.rotation = rotation + newScannedItem.signaturePosition = signaturePosition + newScannedItem.size = size + newScannedItem.rotate = rotate + + return newScannedItem + } +} + public class MultiPageScanSession: Codable { public private(set) var scannedItems:Array<ScannedItem> = [] diff --git a/MiniScanner/Supporting Files/Frameworks/CustomWeScan/Scan/ScannerViewController.swift b/MiniScanner/Supporting Files/Frameworks/CustomWeScan/Scan/ScannerViewController.swift index 81e8dae..c5939a6 100644 --- a/MiniScanner/Supporting Files/Frameworks/CustomWeScan/Scan/ScannerViewController.swift +++ b/MiniScanner/Supporting Files/Frameworks/CustomWeScan/Scan/ScannerViewController.swift @@ -462,9 +462,16 @@ extension ScannerViewController: RectangleDetectionDelegateProtocol { scannedItem.rotation = self.getCurrentRotationAngle() scannedItem.colorOption = self.options.defaultColorRenderOption - scannedItem.render { (_) in self.updateCounterButton() } - scanSession.add(item: scannedItem) + scannedItem.render { [weak self] _ in + guard let self else { return } + + let compressedScannedItem = ImageCompressManager.compress(scannedItem: scannedItem) + + scanSession.add(item: compressedScannedItem) + + updateCounterButton() + } self.captureSessionManager?.start() } -- GitLab