/** * Сжимает изображение до maxSize px по наибольшей стороне и возвращает Blob в формате JPEG. * @param blob - исходное изображение * @param maxSize - максимальный размер стороны в px (по умолчанию 512) * @param quality - качество JPEG от 0 до 1 (по умолчанию 0.8) */ export const compressImage = (blob: Blob, maxSize = 512, quality = 0.8): Promise => { return new Promise((resolve, reject) => { const img = new Image(); img.onload = () => { const canvas = document.createElement('canvas'); const scale = maxSize / Math.max(img.width, img.height); canvas.width = img.width * scale; canvas.height = img.height * scale; const ctx = canvas.getContext('2d'); if (!ctx) return reject(new Error('Canvas context not available')); ctx.drawImage(img, 0, 0, canvas.width, canvas.height); canvas.toBlob( (compressedBlob) => { if (compressedBlob) resolve(compressedBlob); else reject(new Error('Compression failed')); }, 'image/jpeg', quality ); }; img.onerror = reject; img.src = URL.createObjectURL(blob); }); };