Skip to content

Commit 65942ac

Browse files
committed
Update YYCoder to support new 5.15.0 encodeWithFrames API
1 parent 3fbb49c commit 65942ac

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

SDWebImageYYPlugin/Classes/YYImage/YYImageBridge/SDImageYYCoder.m

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)