代码之家  ›  专栏  ›  技术社区  ›  HRK44

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

  •  0
  • HRK44  · 技术社区  · 6 年前

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

    我尝试了很多“exif”解析器/阅读器,但由于特殊的JPEG无损(SOF 3),没有一个能在我的图像上工作。

    我尝试了一些在线工具(get metadata.com等)它工作正常,这就是输出:

    编码过程: 无损哈夫曼编码

    编码过程: 基线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 回复  |  直到 6 年前
        1
  •  0
  •   user3344003    6 年前

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