Clean and consolidate some logic code in SDImageIOCoder
This commit is contained in:
parent
efcfacebc0
commit
8e5897338c
|
@ -84,19 +84,7 @@
|
||||||
#pragma mark - Progressive Decode
|
#pragma mark - Progressive Decode
|
||||||
|
|
||||||
- (BOOL)canIncrementalDecodeFromData:(NSData *)data {
|
- (BOOL)canIncrementalDecodeFromData:(NSData *)data {
|
||||||
switch ([NSData sd_imageFormatForImageData:data]) {
|
return [self canDecodeFromData:data];
|
||||||
case SDImageFormatWebP:
|
|
||||||
// Do not support WebP progressive decoding
|
|
||||||
return NO;
|
|
||||||
case SDImageFormatHEIC:
|
|
||||||
// Check HEIC decoding compatibility
|
|
||||||
return [[self class] canDecodeFromHEICFormat];
|
|
||||||
case SDImageFormatHEIF:
|
|
||||||
// Check HEIF decoding compatibility
|
|
||||||
return [[self class] canDecodeFromHEIFFormat];
|
|
||||||
default:
|
|
||||||
return YES;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)initIncrementalWithOptions:(nullable SDImageCoderOptions *)options {
|
- (instancetype)initIncrementalWithOptions:(nullable SDImageCoderOptions *)options {
|
||||||
|
@ -251,15 +239,21 @@
|
||||||
return [imageData copy];
|
return [imageData copy];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
+ (BOOL)canDecodeFromFormat:(SDImageFormat)format {
|
||||||
|
BOOL canDecode = NO;
|
||||||
|
CFStringRef imageUTType = [NSData sd_UTTypeFromImageFormat:format];
|
||||||
|
NSArray *imageUTTypes = (__bridge_transfer NSArray *)CGImageSourceCopyTypeIdentifiers();
|
||||||
|
if ([imageUTTypes containsObject:(__bridge NSString *)(imageUTType)]) {
|
||||||
|
canDecode = YES;
|
||||||
|
}
|
||||||
|
return canDecode;
|
||||||
|
}
|
||||||
|
|
||||||
+ (BOOL)canDecodeFromHEICFormat {
|
+ (BOOL)canDecodeFromHEICFormat {
|
||||||
static BOOL canDecode = NO;
|
static BOOL canDecode = NO;
|
||||||
static dispatch_once_t onceToken;
|
static dispatch_once_t onceToken;
|
||||||
dispatch_once(&onceToken, ^{
|
dispatch_once(&onceToken, ^{
|
||||||
CFStringRef imageUTType = [NSData sd_UTTypeFromImageFormat:SDImageFormatHEIC];
|
canDecode = [self canDecodeFromFormat:SDImageFormatHEIC];
|
||||||
NSArray *imageUTTypes = (__bridge_transfer NSArray *)CGImageSourceCopyTypeIdentifiers();
|
|
||||||
if ([imageUTTypes containsObject:(__bridge NSString *)(imageUTType)]) {
|
|
||||||
canDecode = YES;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
return canDecode;
|
return canDecode;
|
||||||
}
|
}
|
||||||
|
@ -268,32 +262,34 @@
|
||||||
static BOOL canDecode = NO;
|
static BOOL canDecode = NO;
|
||||||
static dispatch_once_t onceToken;
|
static dispatch_once_t onceToken;
|
||||||
dispatch_once(&onceToken, ^{
|
dispatch_once(&onceToken, ^{
|
||||||
CFStringRef imageUTType = [NSData sd_UTTypeFromImageFormat:SDImageFormatHEIF];
|
canDecode = [self canDecodeFromFormat:SDImageFormatHEIF];
|
||||||
NSArray *imageUTTypes = (__bridge_transfer NSArray *)CGImageSourceCopyTypeIdentifiers();
|
|
||||||
if ([imageUTTypes containsObject:(__bridge NSString *)(imageUTType)]) {
|
|
||||||
canDecode = YES;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
return canDecode;
|
return canDecode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
+ (BOOL)canEncodeToFormat:(SDImageFormat)format {
|
||||||
|
BOOL canEncode = NO;
|
||||||
|
NSMutableData *imageData = [NSMutableData data];
|
||||||
|
CFStringRef imageUTType = [NSData sd_UTTypeFromImageFormat:format];
|
||||||
|
|
||||||
|
// Create an image destination.
|
||||||
|
CGImageDestinationRef imageDestination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)imageData, imageUTType, 1, NULL);
|
||||||
|
if (!imageDestination) {
|
||||||
|
// Can't encode to HEIC
|
||||||
|
canEncode = NO;
|
||||||
|
} else {
|
||||||
|
// Can encode to HEIC
|
||||||
|
CFRelease(imageDestination);
|
||||||
|
canEncode = YES;
|
||||||
|
}
|
||||||
|
return canEncode;
|
||||||
|
}
|
||||||
|
|
||||||
+ (BOOL)canEncodeToHEICFormat {
|
+ (BOOL)canEncodeToHEICFormat {
|
||||||
static BOOL canEncode = NO;
|
static BOOL canEncode = NO;
|
||||||
static dispatch_once_t onceToken;
|
static dispatch_once_t onceToken;
|
||||||
dispatch_once(&onceToken, ^{
|
dispatch_once(&onceToken, ^{
|
||||||
NSMutableData *imageData = [NSMutableData data];
|
canEncode = [self canEncodeToFormat:SDImageFormatHEIC];
|
||||||
CFStringRef imageUTType = [NSData sd_UTTypeFromImageFormat:SDImageFormatHEIC];
|
|
||||||
|
|
||||||
// Create an image destination.
|
|
||||||
CGImageDestinationRef imageDestination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)imageData, imageUTType, 1, NULL);
|
|
||||||
if (!imageDestination) {
|
|
||||||
// Can't encode to HEIC
|
|
||||||
canEncode = NO;
|
|
||||||
} else {
|
|
||||||
// Can encode to HEIC
|
|
||||||
CFRelease(imageDestination);
|
|
||||||
canEncode = YES;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
return canEncode;
|
return canEncode;
|
||||||
}
|
}
|
||||||
|
@ -302,19 +298,7 @@
|
||||||
static BOOL canEncode = NO;
|
static BOOL canEncode = NO;
|
||||||
static dispatch_once_t onceToken;
|
static dispatch_once_t onceToken;
|
||||||
dispatch_once(&onceToken, ^{
|
dispatch_once(&onceToken, ^{
|
||||||
NSMutableData *imageData = [NSMutableData data];
|
canEncode = [self canEncodeToFormat:SDImageFormatHEIF];
|
||||||
CFStringRef imageUTType = [NSData sd_UTTypeFromImageFormat:SDImageFormatHEIF];
|
|
||||||
|
|
||||||
// Create an image destination.
|
|
||||||
CGImageDestinationRef imageDestination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)imageData, imageUTType, 1, NULL);
|
|
||||||
if (!imageDestination) {
|
|
||||||
// Can't encode to HEIF
|
|
||||||
canEncode = NO;
|
|
||||||
} else {
|
|
||||||
// Can encode to HEIF
|
|
||||||
CFRelease(imageDestination);
|
|
||||||
canEncode = YES;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
return canEncode;
|
return canEncode;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue