123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- * (c) Laurin Brandner
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- #import "UIImage+GIF.h"
- #import <ImageIO/ImageIO.h>
- #import "objc/runtime.h"
- #import "NSImage+WebCache.h"
- @implementation UIImage (GIF)
- + (UIImage *)sd_animatedGIFWithData:(NSData *)data {
- if (!data) {
- return nil;
- }
-
- #if SD_MAC
- return [[UIImage alloc] initWithData:data];
- #else
- CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL);
- size_t count = CGImageSourceGetCount(source);
- UIImage *staticImage;
- if (count <= 1) {
- staticImage = [[UIImage alloc] initWithData:data];
- } else {
- // we will only retrieve the 1st frame. the full GIF support is available via the FLAnimatedImageView category.
- // this here is only code to allow drawing animated images as static ones
- #if SD_WATCH
- CGFloat scale = 1;
- scale = [WKInterfaceDevice currentDevice].screenScale;
- #elif SD_UIKIT
- CGFloat scale = 1;
- scale = [UIScreen mainScreen].scale;
- #endif
-
- CGImageRef CGImage = CGImageSourceCreateImageAtIndex(source, 0, NULL);
- #if SD_UIKIT || SD_WATCH
- UIImage *frameImage = [UIImage imageWithCGImage:CGImage scale:scale orientation:UIImageOrientationUp];
- staticImage = [UIImage animatedImageWithImages:@[frameImage] duration:0.0f];
- #endif
- CGImageRelease(CGImage);
- }
- CFRelease(source);
- return staticImage;
- #endif
- }
- - (BOOL)isGIF {
- return (self.images != nil);
- }
- @end
|