lobe-chat
1const compressImage = ({ img, type = 'image/webp' }: { img: HTMLImageElement; type?: string }) => {2// 设置最大宽高3const maxWidth = 2160;4const maxHeight = 2160;5let width = img.width;6let height = img.height;7
8if (width > height && width > maxWidth) {9// 如果图片宽度大于高度且大于最大宽度限制10width = maxWidth;11height = Math.round((maxWidth / img.width) * img.height);12} else if (height > width && height > maxHeight) {13// 如果图片高度大于宽度且大于最大高度限制14height = maxHeight;15width = Math.round((maxHeight / img.height) * img.width);16}17
18const canvas = document.createElement('canvas');19const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;20
21canvas.width = width;22canvas.height = height;23
24ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, width, height);25
26return canvas.toDataURL(type);27};28
29export default compressImage;30