123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- //
- // UIImage+MultiFormat.m
- // SDWebImage
- //
- // Created by Olivier Poitrey on 07/06/13.
- // Copyright (c) 2013 Dailymotion. All rights reserved.
- //
- #import "UIImage+MultiFormat.h"
- #import "UIImage+GIF.h"
- #import "NSData+ImageContentType.h"
- #import <ImageIO/ImageIO.h>
- #ifdef SD_WEBP
- #import "UIImage+WebP.h"
- #endif
- @implementation UIImage (MultiFormat)
- + (UIImage *)sd_imageWithData:(NSData *)data {
- UIImage *image;
- NSString *imageContentType = [NSData sd_contentTypeForImageData:data];
- if ([imageContentType isEqualToString:@"image/gif"]) {
- image = [UIImage sd_animatedGIFWithData:data];
- }
- #ifdef SD_WEBP
- else if ([imageContentType isEqualToString:@"image/webp"])
- {
- image = [UIImage sd_imageWithWebPData:data];
- }
- #endif
- else {
- image = [[UIImage alloc] initWithData:data];
- UIImageOrientation orientation = [self sd_imageOrientationFromImageData:data];
- if (orientation != UIImageOrientationUp) {
- image = [UIImage imageWithCGImage:image.CGImage
- scale:image.scale
- orientation:orientation];
- }
- }
- return image;
- }
- +(UIImageOrientation)sd_imageOrientationFromImageData:(NSData *)imageData {
- UIImageOrientation result = UIImageOrientationUp;
- CGImageSourceRef imageSource = CGImageSourceCreateWithData((__bridge CFDataRef)imageData, NULL);
- if (imageSource) {
- CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL);
- if (properties) {
- CFTypeRef val;
- int exifOrientation;
- val = CFDictionaryGetValue(properties, kCGImagePropertyOrientation);
- if (val) {
- CFNumberGetValue(val, kCFNumberIntType, &exifOrientation);
- result = [self sd_exifOrientationToiOSOrientation:exifOrientation];
- } // else - if it's not set it remains at up
- CFRelease((CFTypeRef) properties);
- } else {
- //NSLog(@"NO PROPERTIES, FAIL");
- }
- CFRelease(imageSource);
- }
- return result;
- }
- #pragma mark EXIF orientation tag converter
- // Convert an EXIF image orientation to an iOS one.
- // reference see here: http://sylvana.net/jpegcrop/exif_orientation.html
- + (UIImageOrientation) sd_exifOrientationToiOSOrientation:(int)exifOrientation {
- UIImageOrientation orientation = UIImageOrientationUp;
- switch (exifOrientation) {
- case 1:
- orientation = UIImageOrientationUp;
- break;
- case 3:
- orientation = UIImageOrientationDown;
- break;
- case 8:
- orientation = UIImageOrientationLeft;
- break;
- case 6:
- orientation = UIImageOrientationRight;
- break;
- case 2:
- orientation = UIImageOrientationUpMirrored;
- break;
- case 4:
- orientation = UIImageOrientationDownMirrored;
- break;
- case 5:
- orientation = UIImageOrientationLeftMirrored;
- break;
- case 7:
- orientation = UIImageOrientationRightMirrored;
- break;
- default:
- break;
- }
- return orientation;
- }
- @end
|