Неожиданный поворот изображения в процессе декодирования-кодирования с помощью библиотеки 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.