Skip to content

Commit 415e6b6

Browse files
committed
Changed methods getFloatValueFor and getIntValueFor as static C methods.
1 parent a197fa1 commit 415e6b6

File tree

1 file changed

+37
-40
lines changed

1 file changed

+37
-40
lines changed

SDWebImageWebPCoder/Classes/SDImageWebPCoder.m

Lines changed: 37 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -884,10 +884,41 @@ - (nullable NSData *)sd_encodedWebpDataWithImage:(nullable CGImageRef)imageRef
884884
return webpData;
885885
}
886886

887-
- (int) getIntValueFor:(SDImageCoderOption) option
888-
defaultValue:(int) defaultValue
889-
options:(nullable SDImageCoderOptions *)options {
890-
id value = [options objectForKey:option];
887+
- (void) updateWebPOptionsToConfig:(WebPConfig * _Nonnull)config
888+
maxFileSize:(NSUInteger)maxFileSize
889+
options:(nullable SDImageCoderOptions *)options {
890+
891+
config->target_size = (int)maxFileSize; // Max filesize for output, 0 means use quality instead
892+
config->pass = maxFileSize > 0 ? 6 : 1; // Use 6 passes for file size limited encoding, which is the default value of `cwebp` command line
893+
config->lossless = 0; // Disable lossless encoding (If we need, can add new Encoding Options in future version)
894+
895+
config->method = GetIntValueForKey(options, SDImageCoderEncodeWebPMethod, config->method);
896+
config->pass = GetIntValueForKey(options, SDImageCoderEncodeWebPPass, config->pass);
897+
config->preprocessing = GetIntValueForKey(options, SDImageCoderEncodeWebPPreprocessing, config->preprocessing);
898+
config->thread_level = GetIntValueForKey(options, SDImageCoderEncodeWebPThreadLevel, 1);
899+
config->low_memory = GetIntValueForKey(options, SDImageCoderEncodeWebPLowMemory, config->low_memory);
900+
config->target_PSNR = GetFloatValueForKey(options, SDImageCoderEncodeWebPTargetPSNR, config->target_PSNR);
901+
config->segments = GetIntValueForKey(options, SDImageCoderEncodeWebPSegments, config->segments);
902+
config->sns_strength = GetIntValueForKey(options, SDImageCoderEncodeWebPSnsStrength, config->sns_strength);
903+
config->filter_strength = GetIntValueForKey(options, SDImageCoderEncodeWebPFilterStrength, config->filter_strength);
904+
config->filter_sharpness = GetIntValueForKey(options, SDImageCoderEncodeWebPFilterSharpness, config->filter_sharpness);
905+
config->filter_type = GetIntValueForKey(options, SDImageCoderEncodeWebPFilterType, config->filter_type);
906+
config->autofilter = GetIntValueForKey(options, SDImageCoderEncodeWebPAutofilter, config->autofilter);
907+
config->alpha_compression = GetIntValueForKey(options, SDImageCoderEncodeWebPAlphaCompression, config->alpha_compression);
908+
config->alpha_filtering = GetIntValueForKey(options, SDImageCoderEncodeWebPAlphaFiltering, config->alpha_filtering);
909+
config->alpha_quality = GetIntValueForKey(options, SDImageCoderEncodeWebPAlphaQuality, config->alpha_quality);
910+
config->show_compressed = GetIntValueForKey(options, SDImageCoderEncodeWebPShowCompressed, config->show_compressed);
911+
config->partitions = GetIntValueForKey(options, SDImageCoderEncodeWebPPartitions, config->partitions);
912+
config->partition_limit = GetIntValueForKey(options, SDImageCoderEncodeWebPPartitionLimit, config->partition_limit);
913+
config->use_sharp_yuv = GetIntValueForKey(options, SDImageCoderEncodeWebPUseSharpYuv, config->use_sharp_yuv);
914+
}
915+
916+
static void FreeImageData(void *info, const void *data, size_t size) {
917+
free((void *)data);
918+
}
919+
920+
static int GetIntValueForKey(NSDictionary * _Nonnull dictionary, NSString * _Nonnull key, int defaultValue) {
921+
id value = [dictionary objectForKey:key];
891922
if (value != nil) {
892923
if ([value isKindOfClass: [NSNumber class]]) {
893924
return [value intValue];
@@ -896,10 +927,8 @@ - (int) getIntValueFor:(SDImageCoderOption) option
896927
return defaultValue;
897928
}
898929

899-
- (float) getFloatValueFor:(SDImageCoderOption) option
900-
defaultValue:(float) defaultValue
901-
options:(nullable SDImageCoderOptions *)options {
902-
id value = [options objectForKey:option];
930+
static float GetFloatValueForKey(NSDictionary * _Nonnull dictionary, NSString * _Nonnull key, float defaultValue) {
931+
id value = [dictionary objectForKey:key];
903932
if (value != nil) {
904933
if ([value isKindOfClass: [NSNumber class]]) {
905934
return [value floatValue];
@@ -908,38 +937,6 @@ - (float) getFloatValueFor:(SDImageCoderOption) option
908937
return defaultValue;
909938
}
910939

911-
- (void) updateWebPOptionsToConfig:(WebPConfig * _Nonnull)config
912-
maxFileSize:(NSUInteger)maxFileSize
913-
options:(nullable SDImageCoderOptions *)options {
914-
915-
config->target_size = (int)maxFileSize; // Max filesize for output, 0 means use quality instead
916-
config->pass = maxFileSize > 0 ? 6 : 1; // Use 6 passes for file size limited encoding, which is the default value of `cwebp` command line
917-
config->lossless = 0; // Disable lossless encoding (If we need, can add new Encoding Options in future version)
918-
919-
config->method = [self getIntValueFor: SDImageCoderEncodeWebPMethod defaultValue: config->method options:options];
920-
config->pass = [self getIntValueFor: SDImageCoderEncodeWebPPass defaultValue: config->pass options:options];
921-
config->preprocessing = [self getIntValueFor: SDImageCoderEncodeWebPPreprocessing defaultValue: config->preprocessing options:options];
922-
config->thread_level = [self getIntValueFor: SDImageCoderEncodeWebPThreadLevel defaultValue: 1 options:options];
923-
config->low_memory = [self getIntValueFor: SDImageCoderEncodeWebPLowMemory defaultValue: config->low_memory options:options];
924-
config->target_PSNR = [self getFloatValueFor: SDImageCoderEncodeWebPTargetPSNR defaultValue: config->target_PSNR options:options];
925-
config->segments = [self getIntValueFor: SDImageCoderEncodeWebPSegments defaultValue: config->segments options:options];
926-
config->sns_strength = [self getIntValueFor: SDImageCoderEncodeWebPSnsStrength defaultValue: config->sns_strength options:options];
927-
config->filter_strength = [self getIntValueFor: SDImageCoderEncodeWebPFilterStrength defaultValue: config->filter_strength options:options];
928-
config->filter_sharpness = [self getIntValueFor: SDImageCoderEncodeWebPFilterSharpness defaultValue: config->filter_sharpness options:options];
929-
config->filter_type = [self getIntValueFor: SDImageCoderEncodeWebPFilterType defaultValue: config->filter_type options:options];
930-
config->autofilter = [self getIntValueFor: SDImageCoderEncodeWebPAutofilter defaultValue: config->autofilter options:options];
931-
config->alpha_compression = [self getIntValueFor: SDImageCoderEncodeWebPAlphaCompression defaultValue: config->alpha_compression options:options];
932-
config->alpha_filtering = [self getIntValueFor: SDImageCoderEncodeWebPAlphaFiltering defaultValue: config->alpha_filtering options:options];
933-
config->alpha_quality = [self getIntValueFor: SDImageCoderEncodeWebPAlphaQuality defaultValue: config->alpha_quality options:options];
934-
config->show_compressed = [self getIntValueFor: SDImageCoderEncodeWebPShowCompressed defaultValue: config->show_compressed options:options];
935-
config->partitions = [self getIntValueFor: SDImageCoderEncodeWebPPartitions defaultValue: config->partitions options:options];
936-
config->partition_limit = [self getIntValueFor: SDImageCoderEncodeWebPPartitionLimit defaultValue: config->partition_limit options:options];
937-
config->use_sharp_yuv = [self getIntValueFor: SDImageCoderEncodeWebPUseSharpYuv defaultValue: config->use_sharp_yuv options:options];
938-
}
939-
940-
static void FreeImageData(void *info, const void *data, size_t size) {
941-
free((void *)data);
942-
}
943940

944941
#pragma mark - SDAnimatedImageCoder
945942
- (instancetype)initWithAnimatedImageData:(NSData *)data options:(nullable SDImageCoderOptions *)options {

0 commit comments

Comments
 (0)