export async function convertImageToBlob({ url, width, height, type, }: { url: string width?: number // Ширина необязательна height?: number // Высота необязательна type: string }): Promise { if (!width && !height) { throw new Error('Необходимо указать хотя бы одно значение: width или height.') } return new Promise((resolve, reject) => { const img = new Image() img.onload = () => { // Вычисляем размеры, сохраняя пропорции const aspectRatio = img.naturalWidth / img.naturalHeight const targetWidth = width || height! * aspectRatio const targetHeight = height || width! / aspectRatio // Создаем canvas и рисуем изображение const canvas = document.createElement('canvas') canvas.width = Math.round(targetWidth) canvas.height = Math.round(targetHeight) const context = canvas.getContext('2d') if (!context) { return reject(new Error('Ошибка создания контекста')) } context.drawImage(img, 0, 0, canvas.width, canvas.height) // Конвертируем canvas в Blob canvas.toBlob( (blob) => { if (blob) { resolve(blob) } else { reject(new Error('Ошибка создания изображения')) } }, type, 1.0, ) URL.revokeObjectURL(url) } img.onerror = () => { reject(new Error('Ошибка загрузки изображения')) } img.src = url }) }