Initial commit
This commit is contained in:
+118
@@ -0,0 +1,118 @@
|
||||
//
|
||||
// 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 {
|
||||
if (!data) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
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
|
||||
Reference in New Issue
Block a user