瀏覽代碼

Merge pull request #777 from deltachat/remove_ios_image_compression

Remove ios image compression
bjoern 5 年之前
父節點
當前提交
4c10d2ff43

+ 0 - 24
DcCore/DcCore/Extensions/UIImage+Extensions.swift

@@ -37,10 +37,6 @@ public extension UIImage {
         return newImage
     }
 
-    func dcCompress(toMax target: Float = 1280) -> UIImage? {
-        return scaleDownAndCompress(toMax: target)
-    }
-
     func imageSizeInPixel() -> CGSize {
         let heightInPoints = size.height
         let heightInPixels = heightInPoints * scale
@@ -48,26 +44,6 @@ public extension UIImage {
         let widthInPixels = widthInPoints * scale
         return CGSize(width: widthInPixels, height: heightInPixels)
     }
-    
-    // if an image has an alpha channel we try to keep it, using PNG formatting instead of JPEG
-    // PNGs are less compressed than JPEGs - to keep the message sizes small,
-    // the size of PNG imgaes will be scaled down
-    func scaleDownAndCompress(toMax: Float) -> UIImage? {
-        let rect = getResizedRectangle(toMax: self.isTransparent() ?
-            min(Float(self.size.width) / 2, toMax / 2) :
-            toMax)
-
-        UIGraphicsBeginImageContextWithOptions(rect.size, !self.isTransparent(), 0.0)
-        draw(in: rect)
-        let img = UIGraphicsGetImageFromCurrentImageContext()
-
-        let imageData = self.isTransparent() ?
-            img?.pngData() :
-            img?.jpegData(compressionQuality: 0.85)
-
-        UIGraphicsEndImageContext()
-        return UIImage(data: imageData!)
-    }
 
     func isTransparent() -> Bool {
       guard let alpha: CGImageAlphaInfo = self.cgImage?.alphaInfo else { return false }

+ 5 - 14
DcCore/DcCore/Helper/DcUtils.swift

@@ -61,25 +61,16 @@ public struct DcUtils {
         return acc
     }
 
-    // compression needs to be done before in UIImage.dcCompress()
     public static func saveImage(image: UIImage) -> String? {
-        let timestamp = Double(Date().timeIntervalSince1970)
-        guard let directory = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask,
-                                                           appropriateFor: nil, create: false) as NSURL,
-            let data = image.isTransparent() ? image.pngData() : image.jpegData(compressionQuality: 1.0),
-            let path = directory.appendingPathComponent("\(timestamp).jpg")
-            else { return nil }
-
-        do {
-            try data.write(to: path)
-            return path.relativePath
-        } catch {
-            DcContext.shared.logger?.info(error.localizedDescription)
+        let suffix = image.isTransparent() ? "png" : "jpg"
+        guard let data = image.isTransparent() ? image.pngData() : image.jpegData(compressionQuality: 1.0) else {
             return nil
         }
+
+        return saveImage(data: data, suffix: suffix)
     }
 
-    public static func saveAnimatedImage(data: Data, suffix: String) -> String? {
+    public static func saveImage(data: Data, suffix: String) -> String? {
         let timestamp = Double(Date().timeIntervalSince1970)
         guard let directory = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask,
                                                            appropriateFor: nil, create: false) as NSURL,

+ 1 - 1
DcShare/Helper/ShareAttachment.swift

@@ -79,7 +79,7 @@ class ShareAttachment {
                 self.dcContext.logger?.debug("Unexpected data: \(type(of: data))")
             }
             if let result = result, let animatedImageData = result.animatedImageData {
-                let path = DcUtils.saveAnimatedImage(data: animatedImageData, suffix: "gif")
+                let path = DcUtils.saveImage(data: animatedImageData, suffix: "gif")
                 let msg = DcMsg(viewType: DC_MSG_GIF)
                 msg.setFile(filepath: path)
                 self.messages.append(msg)

+ 2 - 4
deltachat-ios/Controller/ChatViewController.swift

@@ -1024,17 +1024,15 @@ extension ChatViewController: MessagesDataSource {
             let result = SDAnimatedImage(contentsOfFile: path)
             if let result = result,
                let animatedImageData = result.animatedImageData,
-               let pathInDocDir = DcUtils.saveAnimatedImage(data: animatedImageData, suffix: "gif") {
+               let pathInDocDir = DcUtils.saveImage(data: animatedImageData, suffix: "gif") {
                 self.sendImageMessage(viewType: DC_MSG_GIF, image: result, filePath: pathInDocDir)
             }
         }
     }
 
     private func sendImageMessage(viewType: Int32, image: UIImage, filePath: String, message: String? = nil) {
-        let pixelSize = image.imageSizeInPixel()
         let msg = DcMsg(viewType: viewType)
-        msg.setFile(filepath: filePath, mimeType: viewType == DC_MSG_GIF ? "image/gif" : "image/jpeg")
-        msg.setDimension(width: pixelSize.width, height: pixelSize.height)
+        msg.setFile(filepath: filePath)
         msg.text = (message ?? "").isEmpty ? nil : message
         msg.sendInChat(id: self.chatId)
     }