Added the `sd_isVector` API on UIImage+Metadata, useful for case when we want to filter the vector/bitmap images. Vector currently only sipports PDF/SVG
This commit is contained in:
parent
cb84dbb273
commit
8ca4556066
|
@ -28,12 +28,20 @@
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UIKit:
|
* UIKit:
|
||||||
* Check the `images` array property
|
* Check the `images` array property.
|
||||||
* AppKit:
|
* AppKit:
|
||||||
* NSImage currently only support animated via GIF imageRep unlike UIImage. It will check the imageRep's frame count.
|
* NSImage currently only support animated via GIF imageRep unlike UIImage. It will check the imageRep's frame count.
|
||||||
*/
|
*/
|
||||||
@property (nonatomic, assign, readonly) BOOL sd_isAnimated;
|
@property (nonatomic, assign, readonly) BOOL sd_isAnimated;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UIKit:
|
||||||
|
* Check the `isSymbolImage` property. Also check the system PDF(iOS 11+) && SVG(iOS 13+) support.
|
||||||
|
* AppKit:
|
||||||
|
* NSImage supports PDF && SVG && EPS imageRep, check the imageRep class.
|
||||||
|
*/
|
||||||
|
@property (nonatomic, assign, readonly) BOOL sd_isVector;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The image format represent the original compressed image data format.
|
* The image format represent the original compressed image data format.
|
||||||
* If you don't manually specify a format, this information is retrieve from CGImage using `CGImageGetUTType`, which may return nil for non-CG based image. At this time it will return `SDImageFormatUndefined` as default value.
|
* If you don't manually specify a format, this information is retrieve from CGImage using `CGImageGetUTType`, which may return nil for non-CG based image. At this time it will return `SDImageFormatUndefined` as default value.
|
||||||
|
|
|
@ -32,6 +32,26 @@
|
||||||
return (self.images != nil);
|
return (self.images != nil);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)sd_isVector {
|
||||||
|
if (@available(iOS 13.0, tvOS 13.0, watchOS 6.0, *)) {
|
||||||
|
if (self.isSymbolImage) {
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
|
||||||
|
SEL SVGSelector = NSSelectorFromString(@"_CGSVGDocument");
|
||||||
|
if ([self respondsToSelector:SVGSelector] && [self performSelector:SVGSelector] != nil) {
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
SEL PDFSelector = NSSelectorFromString(@"_CGPDFPage");
|
||||||
|
if ([self respondsToSelector:PDFSelector] && [self performSelector:PDFSelector] != nil) {
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
#pragma clang diagnostic pop
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
- (NSUInteger)sd_imageLoopCount {
|
- (NSUInteger)sd_imageLoopCount {
|
||||||
|
@ -61,7 +81,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)sd_isAnimated {
|
- (BOOL)sd_isAnimated {
|
||||||
BOOL isGIF = NO;
|
BOOL isAnimated = NO;
|
||||||
NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height);
|
NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height);
|
||||||
NSImageRep *imageRep = [self bestRepresentationForRect:imageRect context:nil hints:nil];
|
NSImageRep *imageRep = [self bestRepresentationForRect:imageRect context:nil hints:nil];
|
||||||
NSBitmapImageRep *bitmapImageRep;
|
NSBitmapImageRep *bitmapImageRep;
|
||||||
|
@ -70,9 +90,24 @@
|
||||||
}
|
}
|
||||||
if (bitmapImageRep) {
|
if (bitmapImageRep) {
|
||||||
NSUInteger frameCount = [[bitmapImageRep valueForProperty:NSImageFrameCount] unsignedIntegerValue];
|
NSUInteger frameCount = [[bitmapImageRep valueForProperty:NSImageFrameCount] unsignedIntegerValue];
|
||||||
isGIF = frameCount > 1 ? YES : NO;
|
isAnimated = frameCount > 1 ? YES : NO;
|
||||||
}
|
}
|
||||||
return isGIF;
|
return isAnimated;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)sd_isVector {
|
||||||
|
NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height);
|
||||||
|
NSImageRep *imageRep = [self bestRepresentationForRect:imageRect context:nil hints:nil];
|
||||||
|
if ([imageRep isKindOfClass:[NSPDFImageRep class]]) {
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
if ([imageRep isKindOfClass:[NSEPSImageRep class]]) {
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
if ([NSStringFromClass(imageRep.class) hasSuffix:@"NSSVGImageRep"]) {
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue