如何使用NodeJS提取JPEG编码过程?

时间:2018-12-12 15:02:05

标签: node.js metadata jpeg lossless-compression

我有一些使用不同编码类型(JPEG无损和基线JPEG)的图像,我想从我的图像中提取此信息。

我尝试了很多“ exif”解析器/读取器,但是由于特殊的JPEG无损(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 :(得分:0)

您需要在代码中做更多的工作。您需要跳过带有长度字段的块。这些可以包含原始值FF。然后,您需要找到框架市场的起点并确定其类型。