Просмотр исходного кода

Allow ResizingImageProcessor to resize image using size proxy scaleAspectFill and scaleAspectFit

Kévin Renella 9 лет назад
Родитель
Сommit
b2f673b537
1 измененных файлов с 26 добавлено и 3 удалено
  1. 26 3
      Sources/ImageProcessor.swift

+ 26 - 3
Sources/ImageProcessor.swift

@@ -167,25 +167,48 @@ public struct RoundCornerImageProcessor: ImageProcessor {
 
 /// Processor for resizing images. Only CG-based images are supported in macOS.
 public struct ResizingImageProcessor: ImageProcessor {
+    public enum ContentMode {
+        case none
+        case aspectFit
+        case aspectFill
+    }
+    
     public let identifier: String
     
     /// Target size of output image should be.
     public let targetSize: CGSize
     
+    /// Target content mode of output image should be.
+    /// Default to ContentMode.none
+    public let targetContentMode: ContentMode
+    
     /// Initialize a `ResizingImageProcessor`
     ///
     /// - parameter targetSize: Target size of output image should be.
+    /// - parameter contentMode: Target content mode of output image should be.
     ///
     /// - returns: An initialized `ResizingImageProcessor`.
-    public init(targetSize: CGSize) {
+    public init(targetSize: CGSize, contentMode: ContentMode = .none) {
         self.targetSize = targetSize
-        self.identifier = "com.onevcat.Kingfisher.ResizingImageProcessor(\(targetSize))"
+        self.targetContentMode = contentMode
+        self.identifier = "com.onevcat.Kingfisher.ResizingImageProcessor(\(targetSize), \(targetContentMode))"
     }
     
     public func process(item: ImageProcessItem, options: KingfisherOptionsInfo) -> Image? {
         switch item {
         case .image(let image):
-            return image.kf.resize(to: targetSize)
+            var size: CGSize
+            
+            switch targetContentMode {
+            case .none:
+                size = targetSize
+            case .aspectFill:
+                size = image.size.kf.filling(targetSize)
+            case .aspectFit:
+                size = image.size.kf.constrained(targetSize)
+            }
+            
+            return image.kf.resize(to: size)
         case .data(_):
             return (DefaultImageProcessor.default >> self).process(item: item, options: options)
         }