Sharp读取metadata

栏目: NodeJs 发布时间:2024-12-13

metadata metadata([callback]) ⇒ Promise.<Object> | Sharp

无需解码任何压缩像素数据,即可快速访问(未缓存)图像的元数据。

这是从输入图像的头部读取的。它不考虑将要对输出图像应用的任何操作,如调整大小或旋转。

响应中的尺寸将遵循构造函数参数的pagepages属性。

当未提供回调函数时,将返回一个Promise。

元数据字段

  • format:用于解压图像数据的解码器名称,例如 jpeg、png、webp、gif、svg。
  • size:图像的总字节大小,仅适用于Stream和Buffer输入。
  • width:图像的像素宽度(不考虑EXIF方向,请参阅下面的示例)。
  • height:图像的像素高度(不考虑EXIF方向,请参阅下面的示例)。
  • space:颜色空间解释的名称,例如 srgb、rgb、cmyk、lab、b-w 等。
  • channels:频带的数量,例如 sRGB 为 3,CMYK 为 4。
  • depth:像素深度格式的名称,例如 uchar、char、ushort、float 等。
  • density:如果存在,表示每英寸的像素数(DPI)。
  • chromaSubsampling:包含JPEG色度子采样的字符串,RGB为4:2:0或4:4:4,CMYK为4:2:0:4或4:4:4:4。
  • isProgressive:布尔值,指示图像是否使用渐进扫描进行隔行扫描。
  • pages:图像中包含的页面/帧的数量,支持TIFF、HEIF、PDF、动画GIF和动画WebP。
  • pageHeight:多页图像中每页的高度(以像素为单位)。
  • paletteBitDepth:基于调色板的图像的位深度(GIF、PNG)。
  • loop:动画图像的循环次数,零表示连续循环。
  • delay:动画图像中每页之间的延迟(以毫秒为单位),以整数数组的形式提供。
  • pagePrimary:HEIF图像中的主页面编号。
  • levels:多级图像中每级的详细信息,以对象数组的形式提供,需要libvips编译时支持OpenSlide。
  • subifds:OME-TIFF图像中的子图像文件目录数量。
  • background:如果存在,表示PNG(bKGD)和GIF图像的默认背景颜色,可以是RGB对象或单个灰度值。
  • compression:用于压缩HEIF文件的编码器,av1(AVIF)或hevc(HEIC)。
  • resolutionUnit:如果存在,表示分辨率(density)的单位,为英寸或厘米。
  • hasProfile:布尔值,指示是否存在嵌入的ICC配置文件。
  • hasAlpha:布尔值,指示是否存在alpha透明通道。
  • orientation:如果存在,表示EXIF方向头的数值。
  • exif:如果存在,包含原始EXIF数据的缓冲区。
  • icc:如果存在,包含原始ICC配置文件数据的缓冲区。
  • iptc:如果存在,包含原始IPTC数据的缓冲区。
  • xmp:如果存在,包含原始XMP数据的缓冲区。
  • tifftagPhotoshop:如果存在,包含原始TIFFTAG_PHOTOSHOP数据的缓冲区。
  • formatMagick:通过*magick加载的图像的格式字符串。
  • comments:如果存在,表示PNG文本块的关键字/文本对数组。

参数

  • [callback](函数):使用参数(err, metadata)调用。

示例

const metadata = await sharp(input).metadata();
const image = sharp(inputJpg);
image
  .metadata()
  .then(function(metadata) {
    return image
      .resize(Math.round(metadata.width / 2))
      .webp()
      .toBuffer();
  })
  .then(function(data) {
    // data包含原始JPEG图像宽度和高度一半的WebP图像
  });
// 根据EXIF旋转元数据,获取直立宽度和高度:

const size = getNormalSize(await sharp(input).metadata());

function getNormalSize({ width, height, orientation }) {
  return (orientation || 0) >= 5
    ? { width: height, height: width }
    : { width, height };
}

stats stats([callback]) ⇒ Promise.<Object>

访问图像中每个通道的像素派生图像统计数据。当未提供回调函数时,将返回一个Promise。

统计数据字段

  • channels:图像中每个通道的通道统计信息数组。每个通道统计信息包含:
    • min:通道中的最小值。
    • max:通道中的最大值。
    • sum:通道中所有值的和。
    • squaresSum:通道中值的平方和。
    • mean:通道中值的平均值。
    • stdev:通道中值的标准差。
    • minX:最小值所在像素的x坐标。
    • minY:最小值所在像素的y坐标。
    • maxX:最大值所在像素的x坐标。
    • maxY:最大值所在像素的y坐标。
  • isOpaque:图像是否完全不透明?如果图像没有alpha通道或每个像素都完全不透明,则为true。
  • entropy:基于直方图的灰度熵估计,如果存在alpha通道则忽略。
  • sharpness:基于拉普拉斯卷积的标准差的灰度清晰度估计,如果存在alpha通道则忽略。
  • dominant:包含基于4096个条目的3D直方图的最主导sRGB颜色的对象。

注意:统计数据是从原始输入图像派生的。要对图像执行操作并获取结果的统计数据,必须首先将操作结果写入缓冲区(请参阅第三个示例)。

参数

  • [callback](函数):使用参数(err, stats)调用。

示例

const image = sharp(inputJpg);
image
  .stats()
  .then(function(stats) {
    // stats包含通道统计信息数组和isOpaque值
  });
const { entropy, sharpness, dominant } = await sharp(input).stats();
const { r, g, b } = dominant;
const image = sharp(input);
// 存储中间结果
const part = await image.extract(region).toBuffer();
// 创建新实例以获取提取区域的统计数据
const stats = await sharp(part).stats();

本文地址:https://www.tides.cn/p_node-sharp-metadata