in iOS/WAStickersThirdParty/YYImageCoder.m [1189:1229]
CFDataRef YYCGImageCreateEncodedData(CGImageRef imageRef, YYImageType type, CGFloat quality) {
if (!imageRef) return nil;
quality = quality < 0 ? 0 : quality > 1 ? 1 : quality;
if (type == YYImageTypeWebP) {
#if YYIMAGE_WEBP_ENABLED
if (quality == 1) {
return YYCGImageCreateEncodedWebPData(imageRef, YES, quality, 4, YYImagePresetDefault);
} else {
return YYCGImageCreateEncodedWebPData(imageRef, NO, quality, 4, YYImagePresetDefault);
}
#else
return NULL;
#endif
}
CFStringRef uti = YYImageTypeToUTType(type);
if (!uti) return nil;
CFMutableDataRef data = CFDataCreateMutable(CFAllocatorGetDefault(), 0);
if (!data) return NULL;
CGImageDestinationRef dest = CGImageDestinationCreateWithData(data, uti, 1, NULL);
if (!dest) {
CFRelease(data);
return NULL;
}
NSDictionary *options = @{(id)kCGImageDestinationLossyCompressionQuality : @(quality) };
CGImageDestinationAddImage(dest, imageRef, (CFDictionaryRef)options);
if (!CGImageDestinationFinalize(dest)) {
CFRelease(data);
CFRelease(dest);
return nil;
}
CFRelease(dest);
if (CFDataGetLength(data) == 0) {
CFRelease(data);
return NULL;
}
return data;
}