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