美文网首页
sdwebimage编解码

sdwebimage编解码

作者: SpursGo | 来源:发表于2018-01-03 19:13 被阅读19次
    - (nullable UIImage *)sd_decompressedImageWithImage:(nullable UIImage *)image {
        if (![[self class] shouldDecodeImage:image]) {
            return image;
        }
        
        // autorelease the bitmap context and all vars to help system to free memory when there are memory warning.
        // on iOS7, do not forget to call [[SDImageCache sharedImageCache] clearMemory];
        @autoreleasepool{
            
            CGImageRef imageRef = image.CGImage;
            CGColorSpaceRef colorspaceRef = [[self class] colorSpaceForImageRef:imageRef];
            
            size_t width = CGImageGetWidth(imageRef);
            size_t height = CGImageGetHeight(imageRef);
            size_t bytesPerRow = kBytesPerPixel * width;
            
            // kCGImageAlphaNone is not supported in CGBitmapContextCreate.
            // Since the original image here has no alpha info, use kCGImageAlphaNoneSkipLast
            // to create bitmap graphics contexts without alpha info.
            CGContextRef context = CGBitmapContextCreate(NULL,
                                                         width,
                                                         height,
                                                         kBitsPerComponent,
                                                         bytesPerRow,
                                                         colorspaceRef,
                                                         kCGBitmapByteOrderDefault|kCGImageAlphaNoneSkipLast);
            if (context == NULL) {
                return image;
            }
            
            // Draw the image into the context and retrieve the new bitmap image without alpha
            CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);
            CGImageRef imageRefWithoutAlpha = CGBitmapContextCreateImage(context);
            UIImage *imageWithoutAlpha = [UIImage imageWithCGImage:imageRefWithoutAlpha
                                                             scale:image.scale
                                                       orientation:image.imageOrientation];
            
            CGContextRelease(context);
            CGImageRelease(imageRefWithoutAlpha);
            
            return imageWithoutAlpha;
        }
    }
    
    - (NSData *)encodedDataWithImage:(UIImage *)image format:(SDImageFormat)format {
        if (!image) {
            return nil;
        }
        
        if (format == SDImageFormatUndefined) {
            BOOL hasAlpha = SDCGImageRefContainsAlpha(image.CGImage);
            if (hasAlpha) {
                format = SDImageFormatPNG;
            } else {
                format = SDImageFormatJPEG;
            }
        }
        
        NSMutableData *imageData = [NSMutableData data];
        CFStringRef imageUTType = [NSData sd_UTTypeFromSDImageFormat:format];
        
        // Create an image destination.
        CGImageDestinationRef imageDestination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)imageData, imageUTType, 1, NULL);
        if (!imageDestination) {
            // Handle failure.
            return nil;
        }
        
        NSMutableDictionary *properties = [NSMutableDictionary dictionary];
    #if SD_UIKIT || SD_WATCH
        NSInteger exifOrientation = [SDWebImageCoderHelper exifOrientationFromImageOrientation:image.imageOrientation];
        [properties setValue:@(exifOrientation) forKey:(__bridge_transfer NSString *)kCGImagePropertyOrientation];
    #endif
        
        // Add your image to the destination.
        CGImageDestinationAddImage(imageDestination, image.CGImage, (__bridge CFDictionaryRef)properties);
        
        // Finalize the destination.
        if (CGImageDestinationFinalize(imageDestination) == NO) {
            // Handle failure.
            imageData = nil;
        }
        
        CFRelease(imageDestination);
        
        return [imageData copy];
    }
    

    相关文章

      网友评论

          本文标题:sdwebimage编解码

          本文链接:https://www.haomeiwen.com/subject/dcdknxtx.html