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