@@ -19,21 +19,45 @@ globalThis.onmessage = async (e) => {
1919
2020 try {
2121 let result : File | undefined
22+ let dataToEncode = imageData
23+
24+ // 自动缩放:短边 >= 2880 时缩放到短边 2160
25+ if ( options . target !== 'thumbnail' && options . autoResize ) {
26+ const minDimension = Math . min ( imageData . width , imageData . height )
27+ if ( minDimension >= 2880 ) {
28+ let targetWidth : number | undefined
29+ let targetHeight : number | undefined
30+
31+ if ( imageData . width > imageData . height ) {
32+ targetHeight = 2160
33+ targetWidth = Math . round ( 2160 * imageData . width / imageData . height )
34+ }
35+ else {
36+ targetWidth = 2160
37+ targetHeight = Math . round ( 2160 * imageData . height / imageData . width )
38+ }
39+
40+ dataToEncode = await resize ( imageData , {
41+ width : targetWidth ,
42+ height : targetHeight ,
43+ } )
44+ }
45+ }
2246
2347 if ( options . target === 'jpeg' ) {
24- const jpegData = await encodeJpeg ( imageData , options . encodeOptions )
48+ const jpegData = await encodeJpeg ( dataToEncode , options . encodeOptions )
2549 result = new File ( [ jpegData ] , changeFileExtension ( filename , 'jpg' ) , {
2650 type : 'image/jpeg' ,
2751 } )
2852 }
2953 else if ( options . target === 'webp' ) {
30- const webpData = await encodeWebp ( imageData , options . encodeOptions )
54+ const webpData = await encodeWebp ( dataToEncode , options . encodeOptions )
3155 result = new File ( [ webpData ] , changeFileExtension ( filename , 'webp' ) , {
3256 type : 'image/webp' ,
3357 } )
3458 }
3559 else if ( options . target === 'avif' ) {
36- const avifData = options . encodeOptions ? await encodeAvif ( imageData , options . encodeOptions ) : await encodeAvif ( imageData )
60+ const avifData = options . encodeOptions ? await encodeAvif ( dataToEncode , options . encodeOptions ) : await encodeAvif ( dataToEncode )
3761 result = new File ( [ avifData ] , changeFileExtension ( filename , 'avif' ) , {
3862 type : 'image/avif' ,
3963 } )
0 commit comments