@@ -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