【问题标题】:Input buffer contains unsupported image format输入缓冲区包含不受支持的图像格式
【发布时间】:2023-04-03 02:15:01
【问题描述】:

我也曾在 lovell/sharp issues board 上提出过这个问题,但我希望有人可以就此提供任何建议。

我有一个由 SQS 触发并引用源图像的 lambda。然后我以某种方式获取该图像并尝试sharpify:D

摘录如下:

import axios from "axios";
import sharp from "sharp";
//first get the source image
    try {
        const source = (
            await axios({
                url: rawImage.sourceUrl,
                responseType: "arraybuffer"
            })
        ).data;
        sourceImageBuffer = Buffer.from(source);
        console.log("sourceImageBuffer", sourceImageBuffer);
    } catch (error) {
        problemWithImage = "can't access source image";
        console.log("getObject can't access source image", error);
    }

    //convert image to a sharp object
    try {
        if (!!sourceImageBuffer) {
            imageBuffer = await sharp(sourceImageBuffer).toBuffer();
            imageMetadata = await sharp(imageBuffer).metadata();
        }
    } catch (error) {
        console.log(
            "can't process source image. is it an image? error ",
            error
        );
        problemWithImage = "can't process source image. is it an image?";
        throw new Error(error);
    }

每次抛出以下错误时: 2020-09-29T09:05:07.436Z 2d64036b-3a05-474f-a22a-93e3446204d6 INFO can't process source image. is it an image? error [Error: Input buffer contains unsupported image format]

我尝试使用 s3.getObject 或使用某种请求库来获取图像,我得到了相同的结果。 如果我控制台记录sourceImageBuffer,我会正确得到<Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00 00 ff db 00 43 00 03 02 02 02 02 02 03 02 02 02 03 03 03 03 04 06 04 04 04 04 04 08 06 06 05 ... 25119 more bytes>

当我在本地(在 mac,而不是 docker)运行代码时,它运行完美。

5 天后,500 根白发并阅读了 google 可能提供给我的所有 bug 票...我没有想法了。

我应该尝试使用流而不是缓冲区吗?还是我在 lambda 中缺少一个库?不知道。

示例图片:https://s3.eu-west-1.amazonaws.com/rp-p1-stage-core-images-cold-storage/724/724100/11121/1%3A1/kfmrixsc.jpeg

    versions: {
      cairo: '1.16.0',
      exif: '0.6.22',
      expat: '2.2.9',
      ffi: '3.3',
      fontconfig: '2.13.92',
      freetype: '2.10.2',
      fribidi: '1.0.10',
      gdkpixbuf: '2.40.0',
      gettext: '0.21',
      gif: '5.1.4',
      glib: '2.65.2',
      gsf: '1.14.47',
      harfbuzz: '2.7.1',
      jpeg: '2.0.5',
      lcms: '2.11',
      orc: '0.4.31',
      pango: '1.46.1',
      pixman: '0.40.0',
      png: '1.6.37',
      svg: '2.49.4',
      spng: '0.6.0',
      tiff: '4.1.0',
      vips: '8.10.0',
      webp: '1.1.0',
      xml: '2.9.10',
      zlib: '1.2.11'
    }
format: {
  jpeg: {
    id: 'jpeg',
    input: { file: true, buffer: true, stream: true },
    output: { file: true, buffer: true, stream: true }
  },
  png: {
    id: 'png',
    input: { file: true, buffer: true, stream: true },
    output: { file: true, buffer: true, stream: true }
  },
  webp: {
    id: 'webp',
    input: { file: true, buffer: true, stream: true },
    output: { file: true, buffer: true, stream: true }
  },
  tiff: {
    id: 'tiff',
    input: { file: true, buffer: true, stream: true },
    output: { file: true, buffer: true, stream: true }
  },
  magick: {
    id: 'magick',
    input: { file: false, buffer: false, stream: false },
    output: { file: false, buffer: false, stream: false }
  },
  openslide: {
    id: 'openslide',
    input: { file: false, buffer: false, stream: false },
    output: { file: false, buffer: false, stream: false }
  },
  dz: {
    id: 'dz',
    input: { file: false, buffer: false, stream: false },
    output: { file: true, buffer: true, stream: true }
  },
  ppm: {
    id: 'ppm',
    input: { file: false, buffer: false, stream: false },
    output: { file: false, buffer: false, stream: false }
  },
  fits: {
    id: 'fits',
    input: { file: false, buffer: false, stream: false },
    output: { file: false, buffer: false, stream: false }
  },
  gif: {
    id: 'gif',
    input: { file: true, buffer: true, stream: true },
    output: { file: false, buffer: false, stream: false }
  },
  svg: {
    id: 'svg',
    input: { file: true, buffer: true, stream: true },
    output: { file: false, buffer: false, stream: false }
  },
  heif: {
    id: 'heif',
    input: { file: false, buffer: false, stream: false },
    output: { file: false, buffer: false, stream: false }
  },
  pdf: {
    id: 'pdf',
    input: { file: false, buffer: false, stream: false },
    output: { file: false, buffer: false, stream: false }
  },
  vips: {
    id: 'vips',
    input: { file: true, buffer: false, stream: false },
    output: { file: true, buffer: false, stream: false }
  },
  raw: {
    id: 'raw',
    input: { file: false, buffer: true, stream: true },
    output: { file: false, buffer: true, stream: true }
  }
}

package.json 中的锐化版本 "sharp": "^0.26.1"

【问题讨论】:

    标签: node.js lambda sharp


    【解决方案1】:

    嗯。就这样吧。 在项目的另一部分,我使用sharp-phash 为源图像生成一个唯一的哈希值,这样我就可以检查我是否需要调整大小或旧源和新​​源是否匹配。

    我怀疑sharp-phash 中的强烈依赖和我的项目有冲突,整个事情就爆炸了。

    一旦我删除了 sharp-phash 导入,问题就消失了。

    【讨论】:

      猜你喜欢
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 2021-03-18
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 2017-12-02
      相关资源
      最近更新 更多