Skip to content

Commit bc5f74d

Browse files
committed
Support thumbnail encoding
1 parent 9273aef commit bc5f74d

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

SDWebImageAVIFCoder/Classes/SDImageAVIFCoder.m

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,13 +319,35 @@ - (nullable NSData *)encodedDataWithImage:(nullable UIImage *)image format:(SDIm
319319
compressionQuality = [options[SDImageCoderEncodeCompressionQuality] doubleValue];
320320
}
321321
int quality = compressionQuality * (AVIF_QUALITY_BEST - AVIF_QUALITY_WORST);
322+
CGSize maxPixelSize = CGSizeZero;
323+
NSValue *maxPixelSizeValue = options[SDImageCoderEncodeMaxPixelSize];
324+
if (maxPixelSizeValue != nil) {
325+
#if SD_MAC
326+
maxPixelSize = maxPixelSizeValue.sizeValue;
327+
#else
328+
maxPixelSize = maxPixelSizeValue.CGSizeValue;
329+
#endif
330+
}
322331

323332
avifRWData raw = AVIF_DATA_EMPTY;
324333
avifEncoder *encoder = avifEncoderCreate();
325334
encoder->codecChoice = codecChoice;
326335
encoder->quality = quality;
327336
encoder->qualityAlpha = quality;
328337
encoder->maxThreads = 2;
338+
// Check if need to scale pixel size
339+
CGSize scaledSize = [SDImageCoderHelper scaledSizeWithImageSize:CGSizeMake(width, height) scaleSize:maxPixelSize preserveAspectRatio:YES shouldScaleUp:NO];
340+
if (!CGSizeEqualToSize(scaledSize, CGSizeMake(width, height))) {
341+
// Thumbnail Encoding
342+
assert(scaledSize.width <= width);
343+
assert(scaledSize.height <= height);
344+
avifScalingMode scale;
345+
scale.horizontal.n = (int)scaledSize.width;
346+
scale.horizontal.d = (int)width;
347+
scale.vertical.n = (int)scaledSize.height;
348+
scale.vertical.d = (int)height;
349+
encoder->scalingMode = scale;
350+
}
329351
avifResult result = avifEncoderWrite(encoder, avif, &raw);
330352

331353
avifImageDestroy(avif);

0 commit comments

Comments
 (0)