Przeglądaj źródła

Merge pull request #1074 from onevcat/fix/zero-size-downsampling

Return nil for failing on source creating
Wei Wang 7 lat temu
rodzic
commit
164fe5edaa

+ 3 - 1
Sources/Image/Image.swift

@@ -293,7 +293,9 @@ extension KingfisherWrapper where Base: Image {
             kCGImageSourceShouldCacheImmediately: true,
             kCGImageSourceCreateThumbnailWithTransform: true,
             kCGImageSourceThumbnailMaxPixelSize: maxDimensionInPixels] as CFDictionary
-        let downsampledImage = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, downsampleOptions)!
+        guard let downsampledImage = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, downsampleOptions) else {
+            return nil
+        }
         return KingfisherWrapper.image(cgImage: downsampledImage, scale: scale, refImage: nil)
     }
 }

+ 12 - 5
Tests/KingfisherTests/ImageExtensionTests.swift

@@ -295,11 +295,6 @@ class ImageExtensionTests: XCTestCase {
         let image = KingfisherWrapper<Image>.downsampledImage(data: testImageData, to: size, scale: 1)
         XCTAssertEqual(image?.size, size)
         XCTAssertEqual(image?.kf.scale, 1.0)
-        
-        let largerSize = CGSize(width: 100, height: 100)
-        let largerImage = KingfisherWrapper<Image>.downsampledImage(data: testImageData, to: largerSize, scale: 1)
-        // You can not "downsample" an image to a larger size.
-        XCTAssertEqual(largerImage?.size, CGSize(width: 64, height: 64))
     }
     
     func testDownsamplingWithScale() {
@@ -314,4 +309,16 @@ class ImageExtensionTests: XCTestCase {
         XCTAssertEqual(image?.kf.scale, 2.0)
         #endif
     }
+
+    func testDownsamplingWithEdgeCaseSize() {
+
+        // Zero size would fail downsampling.
+        let nilImage = KingfisherWrapper<Image>.downsampledImage(data: testImageData, to: .zero, scale: 1)
+        XCTAssertNil(nilImage)
+
+        let largerSize = CGSize(width: 100, height: 100)
+        let largerImage = KingfisherWrapper<Image>.downsampledImage(data: testImageData, to: largerSize, scale: 1)
+        // You can not "downsample" an image to a larger size.
+        XCTAssertEqual(largerImage?.size, CGSize(width: 64, height: 64))
+    }
 }