Tengo una foto que es un rectángulo y quiero cambiar su tamaño a un cuadrado manteniendo la relación de aspecto . Las bibliotecas como Sharp le permiten hacer eso aplicando el formato de pantalla ancha a la imagen resultante.
await sharp(photoBuffer).resize({ width: 200, height: 200, fit: 'contain' })
Este es el resultado:
En lugar de aplicar el formato de pantalla ancha, me gustaría que el espacio vacío restante se llene con una segunda versión borrosa de la imagen, colocada detrás de la redimensionada, así:
¿Existe una biblioteca de Node.js que lo haga de manera inmediata o alguna forma personalizada de lograrlo?
Resulta que así es como lo haces usando Sharp:
import Sharp from 'sharp' export default function({ pathToInputFile, pathToOutputFile, size, blur }) { let sharpOriginal = Sharp(pathToInputFile) return new Promise((resolve) => { sharpOriginal .resize({ width: size }) .toBuffer() .then((resizedBuffer) => { sharpOriginal .resize(size, size, { // the result will be a square fit: 'cover' }) .blur(blur) // 6 seems to work well .composite([{ input: resizedBuffer, gravity: 'center' }]) .toFile(pathToOutputFile) .then((info) => { console.log(info) resolve(true) }) .catch((err) => { console.error(err) resolve(false) }) }) .catch((err) => { console.error(err) resolve(false) }) }) }