合成图片
composite
Section titled “composite”composite(images) ⇒
Sharp
处理(调整大小、提取等)图片上的合成图片。
¥Composite image(s) over the processed (resized, extracted etc.) image.
要合成的图片必须与处理后的图片大小相同或更小。如果同时提供了 top 和 left 选项,则它们优先于 gravity。
¥The images to composite must be the same size or smaller than the processed image.
If both top and left options are provided, they take precedence over gravity.
同一处理管道中的其他操作(例如调整大小、旋转、翻转、翻转、提取)将始终在合成之前应用于输入图片。
¥Other operations in the same processing pipeline (e.g. resize, rotate, flip, flop, extract) will always be applied to the input image before composition.
blend 选项可以是 clear、source、over、in、out、atop、dest、dest-over、dest-in、dest-out、dest-atop、xor、add、saturate、multiply、screen、overlay、darken、lighten、colour-dodge、color-dodge、colour-burn 之一 ,color-burn、hard-light、soft-light、difference、exclusion。
¥The blend option can be one of clear, source, over, in, out, atop,
dest, dest-over, dest-in, dest-out, dest-atop,
xor, add, saturate, multiply, screen, overlay, darken, lighten,
colour-dodge, color-dodge, colour-burn,color-burn,
hard-light, soft-light, difference, exclusion.
有关混合模式的更多信息可以在 https://www.libvips.org/API/current/libvips-conversion.html#VipsBlendMode 和 https://www.cairographics.org/operators/ 中找到
¥More information about blend modes can be found at https://www.libvips.org/API/current/libvips-conversion.html#VipsBlendMode and https://www.cairographics.org/operators/
抛出:
¥Throws:
-
Error无效参数¥
ErrorInvalid parameters
自从:0.22.0
¥Since: 0.22.0
| 参数 | 类型 | 默认 | 描述 |
|---|---|---|---|
| images | Array.<Object> | 要合成的图片的有序列表 | |
| [images[].input] | Buffer | String | 包含图片数据的缓冲区、包含图片文件路径的字符串或创建对象(见下文) | |
| [images[].input.create] | Object | 描述要创建的空白覆盖。 | |
| [images[].input.create.width] | Number | ||
| [images[].input.create.height] | Number | ||
| [images[].input.create.channels] | Number | 3-4 | |
| [images[].input.create.background] | String | Object | 由 color 模块解析以提取红色、绿色、蓝色和 alpha 的值。 | |
| [images[].input.text] | Object | 描述要创建的新文本图片。 | |
| [images[].input.text.text] | string | 要渲染为 UTF-8 字符串的文本。它可以包含 Pango 标记,例如 <i>Le</i>Monde。 | |
| [images[].input.text.font] | string | 用于渲染的字体名称。 | |
| [images[].input.text.fontfile] | string | font 可以使用的字体文件的绝对文件系统路径。 | |
| [images[].input.text.width] | number | 0 | 自动换行的像素整数。比此宽的文本行将在字边界处断开。 |
| [images[].input.text.height] | number | 0 | 整数像素高。定义后,dpi 将被忽略,文本将自动适应 width 和 height 定义的像素分辨率。如果未指定 width 或设置为 0,则将被忽略。 |
| [images[].input.text.align] | string | “‘left‘“ | 文本对齐('left'、'centre'、'center'、'right')。 |
| [images[].input.text.justify] | boolean | false | 将其设置为 true 可以对文本应用对齐方式。 |
| [images[].input.text.dpi] | number | 72 | 渲染文本的分辨率(大小)。如果指定了 height,则不生效。 |
| [images[].input.text.rgba] | boolean | false | 将其设置为 true 以启用 RGBA 输出。这对于彩色表情符号渲染或支持 Pango 标记功能(如 <span foreground="red">Red!</span>)很有用。 |
| [images[].input.text.spacing] | number | 0 | 文本行高(以磅为单位)。如果未指定,将使用字体行高。 |
| [images[].autoOrient] | Boolean | false | 设置为 true 以使用 EXIF 方向数据(如果存在)来定位图片。 |
| [images[].blend] | String | ’over’ | 如何将此图片与下面的图片混合。 |
| [images[].gravity] | String | ’centre’ | 放置覆盖层的重力。 |
| [images[].top] | Number | 距顶部边缘的像素偏移。 | |
| [images[].left] | Number | 距左边缘的像素偏移。 | |
| [images[].tile] | Boolean | false | 设置为 true 以使用给定的 gravity 在整个图片上重复覆盖图片。 |
| [images[].premultiplied] | Boolean | false | 设置为 true 以避免预乘下面的图片。相当于 --premultiplied vips 选项。 |
| [images[].density] | Number | 72 | 代表矢量叠加图片 DPI 的数字。 |
| [images[].raw] | Object | 描述使用原始像素数据时的叠加。 | |
| [images[].raw.width] | Number | ||
| [images[].raw.height] | Number | ||
| [images[].raw.channels] | Number | ||
| [images[].animated] | boolean | false | 设置为 true 以读取动画图片的所有帧/页面。 |
| [images[].failOn] | string | “‘warning’“ | @see 构造函数参数 |
| [images[].limitInputPixels] | number | boolean | 268402689 | @see 构造函数参数 |
示例
¥Example
await sharp(background) .composite([ { input: layer1, gravity: 'northwest' }, { input: layer2, gravity: 'southeast' }, ]) .toFile('combined.png');示例
¥Example
const output = await sharp('input.gif', { animated: true }) .composite([ { input: 'overlay.png', tile: true, blend: 'saturate' } ]) .toBuffer();示例
¥Example
sharp('input.png') .rotate(180) .resize(300) .flatten( { background: '#ff6600' } ) .composite([{ input: 'overlay.png', gravity: 'southeast' }]) .sharpen() .withMetadata() .webp( { quality: 90 } ) .toBuffer() .then(function(outputBuffer) { // outputBuffer contains upside down, 300px wide, alpha channel flattened // onto orange background, composited with overlay.png with SE gravity, // sharpened, with metadata, 90% quality WebP image data. Phew! });