marinofaggiana пре 4 година
родитељ
комит
f8d2c44c27

+ 1 - 1
Share/ShareViewController.m

@@ -411,7 +411,7 @@
     else if (UTTypeConformsTo(fileUTI, kUTTypeImage)) {
         image = [UIImage imageWithContentsOfFile:[NSTemporaryDirectory() stringByAppendingString:fileName]];
         if (image) {
-            image = [NCUtility.shared resizeImageWithImage:image toHeight:cell.frame.size.width];
+            image = [NCUtility.shared resizeImage:image size:CGSizeMake(cell.frame.size.width, cell.frame.size.height)];
         } else {
             image = [UIImage imageNamed:@"file_photo"];
         }

+ 2 - 3
iOSClient/PeekPop/CCPeekPop.m

@@ -22,7 +22,6 @@
 //
 
 #import "CCPeekPop.h"
-
 #import "AppDelegate.h"
 #import "CCGraphics.h"
 #import "NCBridgeSwift.h"
@@ -63,7 +62,7 @@
     }
     
     self.view.backgroundColor = NCBrandColor.shared.backgroundForm;
-    self.imagePreview.image = [CCGraphics scaleImage:image toSize:CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height) isAspectRation:true];
+    self.imagePreview.image = [NCUtility.shared resizeImage:image size:CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height)];
     self.preferredContentSize = CGSizeMake(self.imagePreview.image.size.width,  self.imagePreview.image.size.height + highLabelFileName);
 }
 
@@ -108,7 +107,7 @@
     [[NCCommunication shared] downloadPreviewWithFileNamePathOrFileId:fileNamePath fileNamePreviewLocalPath:fileNamePreviewLocalPath widthPreview:NCBrandGlobal.shared.sizePreview heightPreview:NCBrandGlobal.shared.sizePreview fileNameIconLocalPath:fileNameIconLocalPath sizeIcon:NCBrandGlobal.shared.sizeIcon customUserAgent:nil addCustomHeaders:nil endpointTrashbin:false useInternalEndpoint:true completionHandler:^(NSString *account, UIImage *imagePreview, UIImage *imageIcon, NSInteger errorCode,  NSString *errorDescription) {
         
         if (errorCode == 0 && imagePreview != nil) {
-            self.imagePreview.image = [CCGraphics scaleImage:imagePreview toSize:CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height) isAspectRation:true];
+            self.imagePreview.image = [NCUtility.shared resizeImage:imagePreview size:CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height)];
             self.preferredContentSize = CGSizeMake(self.imagePreview.image.size.width, self.imagePreview.image.size.height + highLabelFileName);
         }
     }];

+ 2 - 2
iOSClient/ScanDocument/ScanCollectionView.swift

@@ -403,7 +403,7 @@ extension DragDropViewController : UICollectionViewDataSource {
             
             // 72 DPI
             if imageWidthInPixels > 595 || imageHeightInPixels > 842  {
-                image = CCGraphics.scale(image, to: CGSize(width: 595, height: 842), isAspectRation: true)
+                image = NCUtility.shared.resizeImage(image, size: CGSize(width: 595, height: 842)) ?? image
             }
             
             cell.customImageView?.image = image
@@ -422,7 +422,7 @@ extension DragDropViewController : UICollectionViewDataSource {
             
             // 72 DPI 
             if imageWidthInPixels > 595 || imageHeightInPixels > 842  {
-                image = CCGraphics.scale(image, to: CGSize(width: 595, height: 842), isAspectRation: true)
+                image = NCUtility.shared.resizeImage(image, size: CGSize(width: 595, height: 842)) ?? image                
             }
             
             cell.customImageView?.image = self.filter(image: image)

+ 2 - 2
iOSClient/Settings/CCManageAccount.m

@@ -60,7 +60,7 @@
         UIImage *avatar = [UIImage imageWithContentsOfFile:fileNamePath];
         if (avatar) {
             
-            avatar = [CCGraphics scaleImage:avatar toSize:CGSizeMake(35, 35) isAspectRation:YES];
+            avatar = [NCUtility.shared resizeImage:avatar size:CGSizeMake(35, 35)];
             NCAvatar *avatarImageView = [[NCAvatar alloc] initWithImage:avatar borderColor:[UIColor whiteColor] borderWidth:1];
                         
             CGSize imageSize = avatarImageView.bounds.size;
@@ -71,7 +71,7 @@
             UIGraphicsEndImageContext();
             
         } else {
-            avatar = [CCGraphics scaleImage:[UIImage imageNamed:@"avatarBN"] toSize:CGSizeMake(35, 35) isAspectRation:YES];
+            avatar = [NCUtility.shared resizeImage:[UIImage imageNamed:@"avatarBN"] size:CGSizeMake(35, 35)];
         }
         
         row.cellConfigAtConfigure[@"backgroundColor"] = NCBrandColor.shared.backgroundCell;

+ 0 - 1
iOSClient/Utility/CCGraphics.h

@@ -30,7 +30,6 @@
 
 + (UIImage *)thumbnailImageForVideo:(NSURL *)videoURL atTime:(NSTimeInterval)time;
 + (void)createNewImageFrom:(NSString *)fileName ocId:(NSString *)ocId etag:(NSString *)etag typeFile:(NSString *)typeFile;
-+ (UIImage *)scaleImage:(UIImage *)image toSize:(CGSize)targetSize isAspectRation:(BOOL)aspect;
 + (UIColor *)colorFromHexString:(NSString *)hexString;
 + (void)settingThemingColor:(NSString *)themingColor themingColorElement:(NSString *)themingColorElement themingColorText:(NSString *)themingColorText;
 

+ 4 - 33
iOSClient/Utility/CCGraphics.m

@@ -66,36 +66,6 @@
     return image;
 }
 
-+ (UIImage *)scaleImage:(UIImage *)image toSize:(CGSize)targetSize isAspectRation:(BOOL)aspect
-{
-    CGFloat originRatio = image.size.width / image.size.height;
-    CGFloat newRatio = targetSize.width / targetSize.height;
-    CGSize sz;
-    CGFloat scale = 1.0;
-    
-    if (!aspect) {
-        sz = targetSize;
-    }else {
-        if (originRatio < newRatio) {
-            sz.height = targetSize.height;
-            sz.width = targetSize.height * originRatio;
-        }else {
-            sz.width = targetSize.width;
-            sz.height = targetSize.width / originRatio;
-        }
-    }
-    
-    sz.width /= scale;
-    sz.height /= scale;
-    
-    UIGraphicsBeginImageContextWithOptions(sz, NO, UIScreen.mainScreen.scale);
-    [image drawInRect:CGRectMake(0, 0, sz.width, sz.height)];
-    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
-    UIGraphicsEndImageContext();
-    
-    return newImage;
-}
-
 + (void)createNewImageFrom:(NSString *)fileName ocId:(NSString *)ocId etag:(NSString *)etag typeFile:(NSString *)typeFile
 {
     UIImage *originalImage;
@@ -125,9 +95,10 @@
         originalImage = [self generateImageFromVideo:[NSTemporaryDirectory() stringByAppendingString:@"tempvideo.mp4"]];
     }
 
-    scaleImagePreview = [self scaleImage:originalImage toSize:CGSizeMake(NCBrandGlobal.shared.sizePreview, NCBrandGlobal.shared.sizePreview) isAspectRation:YES];
-    scaleImageIcon = [self scaleImage:originalImage toSize:CGSizeMake(NCBrandGlobal.shared.sizeIcon, NCBrandGlobal.shared.sizeIcon) isAspectRation:YES];
-
+    scaleImagePreview = [NCUtility.shared resizeImage:originalImage size:CGSizeMake(NCBrandGlobal.shared.sizePreview, NCBrandGlobal.shared.sizePreview)];
+    
+    scaleImageIcon = [NCUtility.shared resizeImage:originalImage size:CGSizeMake(NCBrandGlobal.shared.sizeIcon, NCBrandGlobal.shared.sizeIcon)];
+    
     scaleImagePreview = [UIImage imageWithData:UIImageJPEGRepresentation(scaleImagePreview, 0.5f)];
     scaleImageIcon = [UIImage imageWithData:UIImageJPEGRepresentation(scaleImageIcon, 0.5f)];
     

+ 31 - 29
iOSClient/Utility/NCUtility.swift

@@ -26,6 +26,7 @@ import SVGKit
 import KTVHTTPCache
 import NCCommunication
 import PDFKit
+import Accelerate
 
 class NCUtility: NSObject {
     @objc static let shared: NCUtility = {
@@ -111,35 +112,36 @@ class NCUtility: NSObject {
         return false
     }
     
-    @objc func resizeImage(image: UIImage, toHeight: CGFloat) -> UIImage {
-        return autoreleasepool { () -> UIImage in
-            let toWidth = image.size.width * (toHeight/image.size.height)
-            let targetSize = CGSize(width: toWidth, height: toHeight)
-            let size = image.size
-        
-            let widthRatio  = targetSize.width  / size.width
-            let heightRatio = targetSize.height / size.height
-        
-            // Orientation detection
-            var newSize: CGSize
-            if(widthRatio > heightRatio) {
-            newSize = CGSize(width: size.width * heightRatio, height: size.height * heightRatio)
-            } else {
-            newSize = CGSize(width: size.width * widthRatio,  height: size.height * widthRatio)
-            }
-        
-            // Calculated rect
-            let rect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height)
-        
-            // Resize
-            UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0)
-            image.draw(in: rect)
-        
-            let newImage = UIGraphicsGetImageFromCurrentImageContext()
-            UIGraphicsEndImageContext()
-        
-            return newImage!
-        }
+    @objc func resizeImage(_ image: UIImage, size: CGSize) -> UIImage? {
+        
+        let cgImage = image.cgImage!
+        var format = vImage_CGImageFormat(bitsPerComponent: 8, bitsPerPixel: 32, colorSpace: nil, bitmapInfo: CGBitmapInfo(rawValue: CGImageAlphaInfo.first.rawValue), version: 0, decode: nil, renderingIntent: CGColorRenderingIntent.defaultIntent)
+        var sourceBuffer = vImage_Buffer()
+        defer {
+            free(sourceBuffer.data)
+        }
+        var error = vImageBuffer_InitWithCGImage(&sourceBuffer, &format, nil, cgImage, numericCast(kvImageNoFlags))
+        guard error == kvImageNoError else { return nil }
+        // create a destination buffer
+        let destWidth = Int(size.width)
+        let destHeight = Int(size.height)
+        let bytesPerPixel = image.cgImage!.bitsPerPixel/8
+        let destBytesPerRow = destWidth * bytesPerPixel
+        let destData = UnsafeMutablePointer<UInt8>.allocate(capacity: destHeight * destBytesPerRow)
+        defer {
+            destData.deallocate()
+        }
+        var destBuffer = vImage_Buffer(data: destData, height: vImagePixelCount(destHeight), width: vImagePixelCount(destWidth), rowBytes: destBytesPerRow)
+        // scale the image
+        error = vImageScale_ARGB8888(&sourceBuffer, &destBuffer, nil, numericCast(kvImageHighQualityResampling))
+        guard error == kvImageNoError else { return nil }
+        // create a CGImage from vImage_Buffer
+        var destCGImage = vImageCreateCGImageFromBuffer(&destBuffer, &format, nil, nil, numericCast(kvImageNoFlags), &error)?.takeRetainedValue()
+        guard error == kvImageNoError else { return nil }
+        // create a UIImage
+        let resizedImage = destCGImage.flatMap { UIImage(cgImage: $0, scale: 0.0, orientation: image.imageOrientation) }
+        destCGImage = nil
+        return resizedImage
     }
     
     func cellBlurEffect(with frame: CGRect) -> UIView {