@@ -884,10 +884,41 @@ - (nullable NSData *)sd_encodedWebpDataWithImage:(nullable CGImageRef)imageRef
884
884
return webpData;
885
885
}
886
886
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];
891
922
if (value != nil ) {
892
923
if ([value isKindOfClass: [NSNumber class ]]) {
893
924
return [value intValue ];
@@ -896,10 +927,8 @@ - (int) getIntValueFor:(SDImageCoderOption) option
896
927
return defaultValue;
897
928
}
898
929
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];
903
932
if (value != nil ) {
904
933
if ([value isKindOfClass: [NSNumber class ]]) {
905
934
return [value floatValue ];
@@ -908,38 +937,6 @@ - (float) getFloatValueFor:(SDImageCoderOption) option
908
937
return defaultValue;
909
938
}
910
939
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
- }
943
940
944
941
#pragma mark - SDAnimatedImageCoder
945
942
- (instancetype )initWithAnimatedImageData : (NSData *)data options : (nullable SDImageCoderOptions *)options {
0 commit comments