Sharp读取metadata
栏目:
NodeJs
发布时间:2024-12-13
metadata
metadata([callback]) ⇒ Promise.<Object> | Sharp
无需解码任何压缩像素数据,即可快速访问(未缓存)图像的元数据。
这是从输入图像的头部读取的。它不考虑将要对输出图像应用的任何操作,如调整大小或旋转。
响应中的尺寸将遵循构造函数参数的page
和pages
属性。
当未提供回调函数时,将返回一个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