Как извлечь процесс кодирования JPEG с NodeJS? - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть несколько изображений, использующих различные типы кодирования (JPEG Lossless и базовый JPEG), и я хочу извлечь эту информацию из моих изображений.

Я пробовал несколько анализаторов / читателей exif, ноНи один из них не работает с моими изображениями из-за специального JPEG Lossless (SOF 3).

Я пробовал с некоторыми онлайн-инструментами (get-metadata dot com и т. д.), и он работает нормально, вот что выводится:

Процесс кодирования: Кодирование без потерь, кодирование Хаффмана

Или для обычного JPEG:

КодированиеПроцесс: Базовый DCT, кодирование Хаффмана

Знаете ли вы простой способ или библиотеку, которая могла бы это сделать?У меня есть изображение в качестве буфера в NodeJS.

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

//0xFF 0xD8 means that it is a JPEG image
if (pixelData[0] === 0xFF && pixelData[1] === 0xD8) {

    //this field contains the encoding process
    //see https://www.loc.gov/preservation/digital/formats/fdd/fdd000334.shtml
    //see https://en.wikipedia.org/wiki/JPEG for more info
    // NOT SURE ABOUT THIS ?
    const jpegProcess = pixelData[21];

    //0xC3 0xC7 0xCB 0xCF is for JPEG Lossless compression (SOF3)
    if (jpegProcess === 0xC3 || jpegProcess === 0xC7 || jpegProcess === 0xCB || jpegProcess === 0xCF) {
        ...decode image
    } //0xC0 0xC2 0xDB are baseline JPEG
    else {
        ...do other stuff...
    }
}

1 Ответ

0 голосов
/ 12 декабря 2018

Вам нужно немного больше работы в вашем коде.Вам нужно пропустить блоки с полями длины.Они могут содержать необработанное значение FF.Затем вам нужно найти начало рынка рам и определить его тип.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...