SDWebImageDownloaderOperation: pass orientation to initWithCGImage during progressive rendering
This commit is contained in:
parent
10ff1892b4
commit
c13ec87b15
|
@ -32,6 +32,7 @@
|
|||
|
||||
@implementation SDWebImageDownloaderOperation {
|
||||
size_t width, height;
|
||||
UIImageOrientation orientation;
|
||||
BOOL responseFromCached;
|
||||
}
|
||||
|
||||
|
@ -216,12 +217,22 @@
|
|||
if (width + height == 0) {
|
||||
CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL);
|
||||
if (properties) {
|
||||
NSInteger orientationValue = -1;
|
||||
CFTypeRef val = CFDictionaryGetValue(properties, kCGImagePropertyPixelHeight);
|
||||
if (val) CFNumberGetValue(val, kCFNumberLongType, &height);
|
||||
val = CFDictionaryGetValue(properties, kCGImagePropertyPixelWidth);
|
||||
if (val) CFNumberGetValue(val, kCFNumberLongType, &width);
|
||||
val = CFDictionaryGetValue(properties, kCGImagePropertyOrientation);
|
||||
if (val) CFNumberGetValue(val, kCFNumberNSIntegerType, &orientationValue);
|
||||
CFRelease(properties);
|
||||
|
||||
// When we draw to Core Graphics, we lose orientation information,
|
||||
// which means the image below born of initWithCGIImage will be
|
||||
// oriented incorrectly sometimes. (Unlike the image born of initWithData
|
||||
// in connectionDidFinishLoading.) So save it here and pass it on later.
|
||||
orientation = [[self class] orientationFromPropertyValue:(orientationValue == -1 ? 1 : orientationValue)];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (width + height > 0 && totalSize < self.expectedSize) {
|
||||
|
@ -249,7 +260,7 @@
|
|||
#endif
|
||||
|
||||
if (partialImageRef) {
|
||||
UIImage *image = [UIImage imageWithCGImage:partialImageRef];
|
||||
UIImage *image = [UIImage imageWithCGImage:partialImageRef scale:1 orientation:orientation];
|
||||
UIImage *scaledImage = [self scaledImageForKey:self.request.URL.absoluteString image:image];
|
||||
image = [UIImage decodedImageWithImage:scaledImage];
|
||||
CGImageRelease(partialImageRef);
|
||||
|
@ -269,6 +280,29 @@
|
|||
}
|
||||
}
|
||||
|
||||
+ (UIImageOrientation)orientationFromPropertyValue:(NSInteger)value {
|
||||
switch (value) {
|
||||
case 1:
|
||||
return UIImageOrientationUp;
|
||||
case 3:
|
||||
return UIImageOrientationDown;
|
||||
case 8:
|
||||
return UIImageOrientationLeft;
|
||||
case 6:
|
||||
return UIImageOrientationRight;
|
||||
case 2:
|
||||
return UIImageOrientationUpMirrored;
|
||||
case 4:
|
||||
return UIImageOrientationDownMirrored;
|
||||
case 5:
|
||||
return UIImageOrientationLeftMirrored;
|
||||
case 7:
|
||||
return UIImageOrientationRightMirrored;
|
||||
default:
|
||||
return UIImageOrientationUp;
|
||||
}
|
||||
}
|
||||
|
||||
- (UIImage *)scaledImageForKey:(NSString *)key image:(UIImage *)image {
|
||||
return SDScaledImageForKey(key, image);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue