@@ -123,6 +123,24 @@ - (BOOL)canEncodeToFormat:(SDImageFormat)format {
123123}
124124
125125- (NSData *)encodedDataWithImage : (UIImage *)image format : (SDImageFormat)format options : (SDImageCoderOptions *)options {
126+ if (!image) {
127+ return nil ;
128+ }
129+
130+ NSArray <SDImageFrame *> *frames = [SDImageCoderHelper framesFromAnimatedImage: image];
131+ if (!frames || frames.count == 0 ) {
132+ SDImageFrame *frame = [SDImageFrame frameWithImage: image duration: 0 ];
133+ frames = @[frame];
134+ }
135+ return [self encodedDataWithFrames: frames loopCount: image.sd_imageLoopCount format: format options: options];
136+ }
137+
138+ - (NSData *)encodedDataWithFrames : (NSArray <SDImageFrame *> *)frames loopCount : (NSUInteger )loopCount format : (SDImageFormat)format options : (SDImageCoderOptions *)options {
139+ UIImage *image = frames.firstObject .image ; // Primary image
140+ if (!image) {
141+ return nil ;
142+ }
143+
126144 double compressionQuality = 1 ;
127145 if (options[SDImageCoderEncodeCompressionQuality]) {
128146 compressionQuality = [options[SDImageCoderEncodeCompressionQuality] doubleValue ];
@@ -133,15 +151,14 @@ - (NSData *)encodedDataWithImage:(UIImage *)image format:(SDImageFormat)format o
133151 YYImageType type = YYImageTypeFromSDImageFormat (format);
134152 BOOL encodeFirstFrame = [options[SDImageCoderEncodeFirstFrameOnly] boolValue ];
135153
136- NSArray <SDImageFrame *> *frames = [SDImageCoderHelper framesFromAnimatedImage: image];
137- if (encodeFirstFrame || frames.count == 0 ) {
154+ if (encodeFirstFrame || frames.count <= 1 ) {
138155 // Static Image
139156 imageData = [YYImageEncoder encodeImage: image type: type quality: compressionQuality];
140157 } else {
141158 // Animated Image
142159 YYImageEncoder *encoder = [[YYImageEncoder alloc ] initWithType: type];
143160 encoder.quality = compressionQuality;
144- encoder.loopCount = image. sd_imageLoopCount ;
161+ encoder.loopCount = loopCount ;
145162 if (!encoder) {
146163 return nil ;
147164 }
@@ -152,7 +169,6 @@ - (NSData *)encodedDataWithImage:(UIImage *)image format:(SDImageFormat)format o
152169 imageData = [encoder encode ];
153170 }
154171
155-
156172 return imageData;
157173}
158174
0 commit comments