/** 计算图片尺寸改变 */ export function calcResizeImage( wh: { w: number; h: number }, resizeOptions: { fixW?: number fixH?: number maxW?: number maxH?: number scale?: number scaleW?: number scaleH?: number // 容器尺寸 container?: { w: number; h: number } /** 不要对结果的像素四舍五入 */ noRoundPixel?: boolean // 不要超过缩放比例 maxScale?: number } ) { let aspectRatio = wh.w / wh.h let newW = wh.w let newH = wh.h if (resizeOptions.fixW) { newW = resizeOptions.fixW newH = newW / aspectRatio if (resizeOptions.maxH && newH > resizeOptions.maxH) { newH = resizeOptions.maxH newW = newH * aspectRatio } if (Number.isNaN(newH) || newH === 0) newH = newW } else if (resizeOptions.fixH) { newH = resizeOptions.fixH newW = newH * aspectRatio if (resizeOptions.maxW && newW > resizeOptions.maxW) { newW = resizeOptions.maxW newH = newW / aspectRatio } if (Number.isNaN(newW) || newW === 0) newW = newH } if (resizeOptions.scale) { newW = newW * resizeOptions.scale newH = newH * resizeOptions.scale } if (resizeOptions.scaleW) { newW = newW * resizeOptions.scaleW newH = newH } if (resizeOptions.scaleH) { newW = newW newH = newH * resizeOptions.scaleH } if (resizeOptions.container) { let scaleW = resizeOptions.container.w / newW let scaleH = resizeOptions.container.h / newH let s = Math.min(scaleW, scaleH) newW = Math.round(newW * s) newH = Math.round(newH * s) } if (resizeOptions.maxScale) { let scaleW = newW / wh.w let scaleH = newH / wh.h let s = Math.min(scaleW, scaleH, resizeOptions.maxScale) newW = Math.round(wh.w * s) newH = Math.round(wh.h * s) } if (resizeOptions.noRoundPixel) { return { w: newW, h: newH } } else { return { w: Math.round(newW), h: Math.round(newH) } } }