From c9182795972073f773cece8e7106c60e960aa1c0 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Thu, 7 Dec 2017 18:05:30 -0500 Subject: [PATCH] Convert image attachment thresholds to be based on file size. --- .../attachments/SignalAttachment.swift | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/SignalMessaging/attachments/SignalAttachment.swift b/SignalMessaging/attachments/SignalAttachment.swift index 3d5ccec86..a9ca0e667 100644 --- a/SignalMessaging/attachments/SignalAttachment.swift +++ b/SignalMessaging/attachments/SignalAttachment.swift @@ -610,11 +610,7 @@ public class SignalAttachment: NSObject { return false } - let imageQualityTier = imageQuality.imageQualityTier() - let maxSize = maxSizeForImage(image: image, - imageUploadQuality:imageQualityTier) - if image.size.width <= maxSize && - image.size.height <= maxSize && + if doesImageHaveAcceptableFileSize(dataSource: dataSource, imageQuality: imageQuality) && dataSource.dataLength() <= kMaxFileSizeImage { return true } @@ -674,7 +670,8 @@ public class SignalAttachment: NSObject { let jpgFilename = baseFilename?.appendingFileExtension("jpg") dataSource.sourceFilename = jpgFilename - if UInt(jpgImageData.count) <= kMaxFileSizeImage { + if doesImageHaveAcceptableFileSize(dataSource: dataSource, imageQuality: imageQuality) && + dataSource.dataLength() <= kMaxFileSizeImage { let recompressedAttachment = SignalAttachment(dataSource : dataSource, dataUTI: kUTTypeJPEG as String) recompressedAttachment.cachedImage = dstImage Logger.verbose("\(TAG) Converted \(attachment.mimeType) to image/jpeg, \(jpgImageData.count) bytes") @@ -718,6 +715,17 @@ public class SignalAttachment: NSObject { return updatedImage! } + private class func doesImageHaveAcceptableFileSize(dataSource: DataSource, imageQuality: TSImageQuality) -> Bool { + switch imageQuality { + case .original: + return true + case .medium: + return dataSource.dataLength() < UInt(1024 * 1024) + case .compact: + return dataSource.dataLength() < UInt(400 * 1024) + } + } + private class func maxSizeForImage(image: UIImage, imageUploadQuality: TSImageQualityTier) -> CGFloat { switch imageUploadQuality { case .original: @@ -742,13 +750,13 @@ public class SignalAttachment: NSObject { case .high: return 0.9 case .mediumHigh: - return 0.7 + return 0.8 case .medium: - return 0.5 + return 0.7 case .mediumLow: - return 0.4 + return 0.6 case .low: - return 0.3 + return 0.5 } }