fix
杨锴
2024-08-23 adc2db9bb29e7f316c46b6de679db1522ffc9cc8
Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.m
@@ -479,7 +479,6 @@
    if (!imageRef) {
        return nil;
    }
    BOOL isDecoded = NO;
    // Thumbnail image post-process
    if (!createFullImage) {
        if (preserveAspectRatio) {
@@ -491,19 +490,19 @@
            if (scaledImageRef) {
                CGImageRelease(imageRef);
                imageRef = scaledImageRef;
                isDecoded = YES;
            }
        }
    }
    // Check whether output CGImage is decoded
    BOOL isLazy = [SDImageCoderHelper CGImageIsLazy:imageRef];
    if (!lazyDecode) {
        if (!isDecoded) {
            // Use CoreGraphics to trigger immediately decode
        if (isLazy) {
            // Use CoreGraphics to trigger immediately decode to drop lazy CGImage
            CGImageRef decodedImageRef = [SDImageCoderHelper CGImageCreateDecoded:imageRef];
            if (decodedImageRef) {
                CGImageRelease(imageRef);
                imageRef = decodedImageRef;
                isDecoded = YES;
                isLazy = NO;
            }
        }
    } else if (animatedImage) {
@@ -545,7 +544,7 @@
    UIImage *image = [[UIImage alloc] initWithCGImage:imageRef scale:scale orientation:exifOrientation];
#endif
    CGImageRelease(imageRef);
    image.sd_isDecoded = isDecoded;
    image.sd_isDecoded = !isLazy;
    
    return image;
}
@@ -832,11 +831,11 @@
    }
    
    NSMutableData *imageData = [NSMutableData data];
    CFStringRef imageUTType = [NSData sd_UTTypeFromImageFormat:format];
    NSString *imageUTType = self.class.imageUTType;
    
    // Create an image destination. Animated Image does not support EXIF image orientation TODO
    // The `CGImageDestinationCreateWithData` will log a warning when count is 0, use 1 instead.
    CGImageDestinationRef imageDestination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)imageData, imageUTType, frames.count ?: 1, NULL);
    CGImageDestinationRef imageDestination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)imageData, (__bridge CFStringRef)imageUTType, frames.count ?: 1, NULL);
    if (!imageDestination) {
        // Handle failure.
        return nil;
@@ -847,7 +846,9 @@
#else
    CGImagePropertyOrientation exifOrientation = kCGImagePropertyOrientationUp;
#endif
    properties[(__bridge NSString *)kCGImagePropertyOrientation] = @(exifOrientation);
    if (exifOrientation != kCGImagePropertyOrientationUp) {
        properties[(__bridge NSString *)kCGImagePropertyOrientation] = @(exifOrientation);
    }
    // Encoding Options
    double compressionQuality = 1;
    if (options[SDImageCoderEncodeCompressionQuality]) {
@@ -922,6 +923,11 @@
    
    CFRelease(imageDestination);
    
    // In some beta version, ImageIO `CGImageDestinationFinalize` returns success, but the data buffer is 0 bytes length.
    if (imageData.length == 0) {
        return nil;
    }
    return [imageData copy];
}