NodeJS 修复Jimp中的图像方向

yi0zb3m4  于 2022-12-18  发布在  Node.js
关注(0)|答案(2)|浏览(124)

我正在使用Jimp(https://www.npmjs.com/package/jimp)库来裁剪图像。
裁剪工作正常,但我只有图像方向的问题。
有时,用户上传旋转的图像和它的结果旋转裁剪图像.
我查阅了https://www.npmjs.com/package/jimp文档,但没有找到任何与此相关的内容。
以下是我浏览过但没有帮助的几个链接:
https://justmarkup.com/articles/2019-10-21-image-orientation/
Accessing JPEG EXIF rotation data in JavaScript on the client side
请帮帮忙

bzzcjhmw

bzzcjhmw1#

所以长话短说JIMP正确地读取经由EXIF定向属性旋转的图像,并且重新排列像素,就好像EXIF/定向属性不存在一样,但是随后还存储旧的EXIF属性,而不是将其重置为1,因为为了在每个设备上正确地显示它,应该将其重置为1。
我能够实现的最简单的解决方案是在将(base64编码的)图像上传到后端之前,使用exif-auto-rotate旋转图像像素并重置前端的exif属性:

import Rotator from 'exif-auto-rotate';
    
    // ...
    
    const [file] = e.target.files;
    
    const image = await Rotator.createRotatedImageAsync(file, "base64")
        .catch(err => {
            if (err === "Image is NOT have a exif code" || err === "Image is NOT JPEG") {
                // just return base64 encoded image if image is not jpeg or contains no exif orientation property
                return toBase64(file)
            }
            // reject if other error
            return Promise.reject(err)
        });

如果您需要在后端执行此操作,那么最好使用带缓冲区的jpeg-autorotate,如下所示:

const fileIn = fs.readFileSync('input.jpg')
const jo = require('jpeg-autorotate')
const {buffer} = await jo.rotate(fileIn, {quality: 30})
const image = await Jimp.read(buffer)

有关基于浏览器的exif方向问题的详细信息:
EXIF Orientation Handling Is a Ghetto

alen0pnh

alen0pnh2#

只是改变这jimp版本到
“跳动”:“0.8.5”,

相关问题