Estoy tratando de rotar imágenes en mi computadora usando Sharp y Nodejs, pero cada rotación provoca un pequeño aumento en el tamaño del archivo, hasta el punto que tengo una imagen 10 veces más grande que su original (de 50 kb a 500 kb) con solo girándolo.
Me di cuenta de que hay preguntas similares sobre stackoverflow, pero todas parecen tener una solución relacionada con la pila de tecnología que se usa y no puedo encontrar nada relacionado con sharp/node.
Tal vez la solución tenga que ver con la codificación con pérdida, no estoy seguro, pero mi objetivo es rotar imágenes como la aplicación Fotos en Windows, que puede rotar sin aumentar el tamaño del archivo, o al menos se restaura el tamaño original del archivo cuando el la imagen se gira a su orientación original.
El código que se utiliza es bastante sencillo:
await sharp(filepath).rotate(90).toFile(output, rotateImgCallback);Gracias @RobertKawecki por la información que necesitaba. Intenté tomar la orientación de las imágenes de entrada con:
let imgPromise = sharp(filepath); const { orientation } = await imgPromise.metadata();luego calculando la nueva orientación en consecuencia y configurándola con:
await imgPromise.withMetadata({ orientation: newOrientation }).toFile(output, rotateImgCallback);sin ninguna operación de rotación
Esto funciona muy bien en jpeg, pero ahora descubrí que los png no usan la orientación exif, así que también tengo que encontrar algo para eso.