Неожиданный поворот изображения в процессе декодирования-кодирования с помощью библиотеки jpeg-js

Я использую библиотеку jpeg-js для декодирования изображения, применения собственного фильтра оттенков серого и его обратного кодирования. Но, к сожалению, каждое вертикальное изображение, которое я обрабатываю, по какой-то причине поворачивается и сохраняется горизонтально (в то время как горизонтальные изображения сохраняют правильное вращение и с ними все в порядке). Вот мой код:

      function greyscale(width, height, data, bytesPerPixel, imageName) {
    const bwPixelData = Buffer.alloc(data.length)

    for (let vrt = 0; vrt < height; vrt++) {
        for (let hrz = 0; hrz < width; hrz++) {
            const offset = (vrt * width + hrz) * bytesPerPixel
            
            const red = data[offset]
            const green = data[offset + 1]
            const blue = data[offset + 2]
            
            const bwPixel = Math.round((red + green + blue) / 3.0)
            
            bwPixelData[offset] = bwPixel
            bwPixelData[offset + 1] = bwPixel
            bwPixelData[offset + 2] = bwPixel
            
        }
    }

    const filteredImageName = encodeImage(bwPixelData, width, height, imageName)
    return filteredImageName

}
exports.decodeImage = function(name, path) {
    if (name.match(/.*\.jpe?g/i)){
        const jpegData =  fs.readFileSync(path)
        return jpeg.decode(jpegData)
    } else {
        throw new Error('Unsupported Media Type')
    }
}


exports.encodeImage = function(data, width, height, imageName) {
    
    const filteredImageName = `outfile-${imageName}`
    
    const rawImageData = {
        data: data,
        width: width,
        height: height,
    }

    
    const jpegImageData = jpeg.encode(rawImageData, 50)

    try {
        fs.writeFileSync(`${outputPath}/${filteredImageName}`, jpegImageData.data);
        console.log('File written successfully');
    } catch (error) {
        console.error('Error writing file:', error);
    }

    return filteredImageName
} 

Сначала я подумал, что проблема может быть скрыта в функции оттенков серого и в том, как я обрабатываю пиксели. Поэтому я попытался декодировать, закодировать и сохранить исходную, нефильтрованную вертикальную фотографию, что привело к тому же результату: неожиданному повороту.

Сталкивались ли вы когда-нибудь с такой проблемой и знает ли кто-нибудь, как ее исправить? Для меня также важно использовать чистую реализацию js вместо таких библиотек, как Sharp.

0 ответов

Другие вопросы по тегам