教程菜单 本页目录

输出选项

toFile

toFile(fileOut, [callback]) ⇒ Promise.<Object>

将输出图像数据写入文件。

如果未选择明确的输出格式,则将从扩展中推断,支持 JPEG、PNG、WebP、AVIF、TIFF、GIF、DZI 和 libvips 的 V 格式。请注意,原始像素数据仅支持缓冲区输出。

默认情况下,将删除所有元数据,包括基于 EXIF 的方向。请参阅 withMetadata 以控制这一点。

调用者负责确保目录结构和权限存在。

未提供回调时返回 Promise。

返回值: Promise.<Object> - - 当没有提供回调时

Throws:

  • 错误 参数无效
参数类型描述
fileOutstring写入图像数据的路径。
[callback]function在完成时使用两个参数 (err, info) 调用。info 包含输出图像格式、大小 (字节)、宽度、高度、通道和预乘 (指示是否使用了预乘)。使用裁剪策略时还包含 cropOffsetLeft 和 cropOffsetTop。使用注意裁剪策略时还包含关注点X 和关注点Y,即裁剪区域的焦点。如果图像是从文本创建的,还可能包含 textAutofitDpi (字体渲染时的 dpi)。

示例

sharp(input)
  .toFile('output.png', (err, info) => { ... });

示例

sharp(input)
  .toFile('output.png')
  .then(info => { ... })
  .catch(err => { ... });

toBuffer

toBuffer([options], [callback]) ⇒ Promise.<Buffer>

将输出写入缓冲区。支持 JPEG、PNG、WebP、AVIF、TIFF、GIF 和原始像素数据输出。

使用 toFormat 或格式特定的函数之一(如 jpeg、png 等)来设置输出格式。

如果未设置显式格式,则输出格式将与输入图像匹配,但 SVG 输入除外,SVG 输入将变为 PNG 输出。

默认情况下,将删除所有元数据,包括基于 EXIF 的方向。请参阅 withMetadata 以控制这一点。

如果存在回调,则回调将获取三个参数([err]、[data]、[info]),其中:

  • [err] 是错误(如果有)。
  • [data] 是输出图像数据。
  • [info] 包含输出图像格式、大小(字节)、宽度、高度、通道和预乘(指示是否使用了预乘)。使用裁剪策略时还包含 cropOffsetLeft 和 cropOffsetTop。如果图像是从文本创建的,还可能包含 textAutofitDpi(字体渲染时的 dpi)。

如果未提供回调,则返回 Promise。

返回: Promise.<Buffer> - - 当没有提供回调时

参数类型说明
[options]Object
[options.resolveWithObject]boolean使用包含数据和信息属性的对象来解析 Promise,而不是仅使用数据解析。
[callback]function

示例

sharp(input)
  .toBuffer((err, data, info) => { ... });

示例le

sharp(input)
  .toBuffer()
  .then(data => { ... })
  .catch(err => { ... });

示例

sharp(input)
  .png()
  .toBuffer({ resolveWithObject: true })
  .then(({ data, info }) => { ... })
  .catch(err => { ... });

示例

const { data, info } = await sharp('my-image.jpg')
  // output the raw pixels
  .raw()
  .toBuffer({ resolveWithObject: true });

// create a more type safe way to work with the raw pixel data
// this will not copy the data, instead it will change `data`s underlying ArrayBuffer
// so `data` and `pixelArray` point to the same memory location
const pixelArray = new Uint8ClampedArray(data.buffer);

// When you are done changing the pixelArray, sharp takes the `pixelArray` as an input
const { width, height, channels } = info;
await sharp(pixelArray, { raw: { width, height, channels } })
  .toFile('my-changed-image.jpg');

keepExif

keepExif() ⇒ Sharp

将输入图像中的所有 EXIF 元数据保留在输出图像中。

TIFF 输出不支持 EXIF 元数据。

: 0.33.0

示例

const outputWithExif = await sharp(inputWithExif)
  .keepExif()
  .toBuffer();

withExif

withExif(exif) ⇒ Sharp

在输出图像中设置 EXIF 元数据,忽略输入图像中的任何 EXIF。

Throws:

  • 错误 参数无效

: 0.33.0

参数类型描述
exifObject.<string, Object.<string, string>>对象由 IFD0、IFD1 等键/值字符串对键入,以写入 EXIF 数据。

示例

const dataWithExif = await sharp(input)
  .withExif({
    IFD0: {
      Copyright: 'The National Gallery'
    },
    IFD3: {
      GPSLatitudeRef: 'N',
      GPSLatitude: '51/1 30/1 3230/100',
      GPSLongitudeRef: 'W',
      GPSLongitude: '0/1 7/1 4366/100'
    }
  })
  .toBuffer();

withExifMerge

withExifMerge(exif) ⇒ Sharp

在输出图像中更新输入图像的 EXIF 元数据。

Throws:

  • 错误 参数无效

: 0.33.0

参数类型描述
exifObject.对象由 IFD0、IFD1 等键/值字符串对键入,以写入 EXIF 数据。

示例

const dataWithMergedExif = await sharp(inputWithExif)
  .withExifMerge({
    IFD0: {
      Copyright: 'The National Gallery'
    }
  })
  .toBuffer();

keepIccProfile

keepIccProfile() ⇒ Sharp

将输入图像中的 ICC 配置文件保留在输出图像中。

必要时,将尝试转换输出色彩空间以匹配配置文件。

: 0.33.0

示例

const outputWithIccProfile = await sharp(inputWithIccProfile)
  .keepIccProfile()
  .toBuffer();

withIccProfile

withIccProfile(icc, [options]) ⇒ Sharp

使用 ICC 配置文件进行转换并附加到输出图像。

这可以是绝对文件系统路径或内置配置文件名称(srgb、p3、cmyk)。

Throws:

  • 错误 参数无效

: 0.33.0

参数类型默认描述
iccstring输出 ICC 配置文件或内置配置文件名称 (srgb、p3、cmyk) 的绝对文件系统路径。
[options]Object
[options.attach]numbertrueICC 配置文件是否应包含在输出图像元数据中?

示例

const outputWithP3 = await sharp(input)
  .withIccProfile('p3')
  .toBuffer();

keepMetadata

keepMetadata() ⇒ Sharp

在输出图像中保留输入图像中的所有元数据(EXIF、ICC、XMP、IPTC)。

当不使用 keepMetadata 时,默认行为是转换为与设备无关的 sRGB 颜色空间并删除所有元数据,包括删除任何 ICC 配置文件。

: 0.33.0

示例

const outputWithMetadata = await sharp(inputWithMetadata)
  .keepMetadata()
  .toBuffer();

withMetadata

withMetadata([options]) ⇒ Sharp

在输出图像中保留输入图像中的大多数元数据 (EXIF、XMP、IPTC)。

如果适用,这还将转换为并添加适合网络的 sRGB ICC 配置文件。

允许设置或更新方向和密度。

Throws:

  • 错误 参数无效
参数类型说明
[options]Object
[options.orientation]number用于更新 EXIF 方向标签,1 到8.
[options.density]number每英寸像素数 (DPI)。

示例

const outputSrgbWithMetadata = await sharp(inputRgbWithMetadata)
  .withMetadata()
  .toBuffer();

示例

// Set output metadata to 96 DPI
const data = await sharp(input)
  .withMetadata({ density: 96 })
  .toBuffer();

toFormat

toFormat(format, options) ⇒ Sharp

强制输出为给定格式。

Throws:

  • 错误:不支持的格式或选项
参数类型描述
formatstring | Object作为字符串或具有“id”属性的对象
optionsObject输出选项

示例

// Convert any input to PNG output
const data = await sharp(input)
  .toFormat('png')
  .toBuffer();

jpeg

jpeg([options]) ⇒ Sharp

使用这些 JPEG 选项输出图像。

Throws:

  • 错误 选项无效
参数类型默认描述
[options]Object输出选项
[options.quality]number80质量,整数 1-100
[options.progressive]booleanfalse使用逐行扫描(隔行扫描)扫描
[options.chromaSubsampling]string"'4:2:0'"设置为“4:4:4”以防止色度二次采样,否则默认为“4:2:0”色度二次采样
[options.optimiseCoding]booleantrue优化霍夫曼编码表格
[options.optimizeCoding]booleantrueoptimiseCoding 的替代拼写
[options.mozjpeg]booleanfalse使用 mozjpeg 默认值,相当于 { trellisQuantisation: true, overshootDeringing: true, optimiseScans: true, quantisationTable: 3 }
[options.trellisQuantisation]booleanfalse应用网格量化
[options.overshootDeringing]booleanfalse应用过冲去环
[options.optimiseScans]booleanfalse优化逐行扫描,强制逐行
[options.optimizeScans]booleanfalseoptimiseScans 的替代拼写
[options.quantisationTable]number0要使用的量化表,整数 0-8
[options.quantizationTable]number0的替代拼写量化表
[options.force]booleantrue强制 JPEG 输出,否则尝试使用输入格式

示例

// Convert any input to very high quality JPEG output
const data = await sharp(input)
  .jpeg({
    quality: 100,
    chromaSubsampling: '4:4:4'
  })
  .toBuffer();

示例

// Use mozjpeg to reduce output JPEG file size (slower)
const data = await sharp(input)
  .jpeg({ mozjpeg: true })
  .toBuffer();

png

png([options]) ⇒ Sharp

使用这些 PNG 选项输出图像。

默认情况下,PNG 输出为 8 位/像素的全彩色。

1、2 或 4 位/像素的索引 PNG 输入将转换为 8 位/像素。将调色板设置为 true 以获得较慢的索引 PNG 输出。

对于 16 位/像素输出,通过 toColourspace 转换为 rgb16。

Throws:

  • 错误无效选项
参数类型默认描述
[options]Object
[options.progressive]booleanfalse使用逐行(隔行)扫描
[options.compressionLevel]number6zlib 压缩级别,0(最快、最大)至 9(最慢、最小)
[options.adaptiveFiltering]booleanfalse使用自适应行过滤
[options.palette]booleanfalse量化为支持 alpha 透明度的基于调色板的图像
[options.quality]number100使用达到给定质量所需的最少颜色数量,将调色板设置为 true
[options.effort]number7CPU 工作量,介于 1(最快)和 10(最慢)之间,将调色板设置为 true
[options.colours]number256调色板条目的最大数量,将调色板设置为true
[options.colors]number256options.colours 的替代拼写,将调色板设置为 true
[options.dither]number1.0Floyd-Steinberg 误差扩散级别,将调色板设置为true
[options.force]booleantrue强制 PNG 输出,否则尝试使用输入格式

示例

// Convert any input to full colour PNG output
const data = await sharp(input)
  .png()
  .toBuffer();

示例

// Convert any input to indexed PNG output (slower)
const data = await sharp(input)
  .png({ palette: true })
  .toBuffer();

示例

// Output 16 bits per pixel RGB(A)
const data = await sharp(input)
 .toColourspace('rgb16')
 .png()
 .toBuffer();

webp

webp([options]) ⇒ Sharp

使用这些 WebP 选项输出图像。

Throws:

  • 错误 选项无效
参数类型默认描述
[options]Object输出选项
[options.quality]number80质量,整数 1-100
[options.alphaQuality]number100alpha 层的质量,整数0-100
[options.lossless]booleanfalse使用无损压缩模式
[options.nearLossless]booleanfalse使用近无损压缩模式
[options.smartSubsample]booleanfalse使用高质量色度子采样
[options.preset]string"'default'"用于预处理/过滤的指定预设,以下之一:默认、照片、图片、绘图、图标、文本
[options.effort]number4CPU 工作量,介于 0(最快)和 6(最慢)之间
[options.loop]number0动画迭代次数,使用 0 表示无限动画
[options.delay]number | Array.动画帧之间的延迟(以毫秒为单位)
[options.minSize]booleanfalse防止使用动画关键帧以最小化文件大小(慢)
[options.mixed]booleanfalse允许有损和无损动画帧混合(慢)
[options.force]booleantrue强制 WebP 输出,否则尝试使用输入格式

示例

// Convert any input to lossless WebP output
const data = await sharp(input)
  .webp({ lossless: true })
  .toBuffer();

示例

// Optimise the file size of an animated WebP
const outputWebp = await sharp(inputWebp, { animated: true })
  .webp({ effort: 6 })
  .toBuffer();

gif

gif([options]) ⇒ Sharp

将这些 GIF 选项用于输出图像。

调色板中的第一个条目保留用于透明度。

如果可能,将重新使用输入图像的调色板。

Throws:

  • 错误 选项无效

: 0.30.0

参数类型默认描述
[options]Object输出选项
[options.reuse]booleantrue重复使用现有调色板,否则生成新的调色板(慢速)
[options.progressive]booleanfalse使用逐行(隔行)扫描
[options.colours]number256调色板条目的最大数量(包括透明度)介于 2 和256
[options.colors]number256options.colours 的替代拼写
[options.effort]number7CPU 工作量,介于 1(最快)和 10 之间(最慢)
[options.dither]number1.0Floyd-Steinberg 误差扩散级别,介于 0(最小)和 1(最大)之间
[options.interFrameMaxError]number0透明度的最大帧间误差,介于 0(无损)和32
[options.interPaletteMaxError]number3调色板重用的最大调色板间误差,介于 0 和 256 之间
[options.loop]number0动画迭代次数,使用 0 表示无限动画
[options.delay]number | Array.动画帧之间的延迟(以毫秒为单位)
[options.force]booleantrue强制 GIF 输出,否则尝试使用输入格式

示例

// Convert PNG to GIF
await sharp(pngBuffer)
  .gif()
  .toBuffer();

示例

// Convert animated WebP to animated GIF
await sharp('animated.webp', { animated: true })
  .toFile('animated.gif');

示例

// Create a 128x128, cropped, non-dithered, animated thumbnail of an animated GIF
const out = await sharp('in.gif', { animated: true })
  .resize({ width: 128, height: 128 })
  .gif({ dither: 0 })
  .toBuffer();

示例

// Lossy file size reduction of animated GIF
await sharp('in.gif', { animated: true })
  .gif({ interFrameMaxError: 8 })
  .toFile('optim.gif');

jp2

jp2([options]) ⇒ Sharp

使用这些 JP2 选项输出图像。

需要编译支持 OpenJPEG 的 libvips。预构建的二进制文件不包含此功能 - 请参阅安装自定义 libvips。

Throws:

  • 错误 选项无效

: 0.29.1

参数类型默认描述
[options]Object输出选项
[options.quality]number80质量,整数 1-100
[options.lossless]booleanfalse使用无损压缩模式
[options.tileWidth]number512水平平铺大小
[options.tileHeight]number512垂直平铺尺寸
[options.chromaSubsampling]string"'4:4:4'"设置为“4:2:0”以使用色度子采样

示例

// Convert any input to lossless JP2 output
const data = await sharp(input)
  .jp2({ lossless: true })
  .toBuffer();

示例

// Convert any input to very high quality JP2 output
const data = await sharp(input)
  .jp2({
    quality: 100,
    chromaSubsampling: '4:4:4'
  })
  .toBuffer();

tiff

tiff([options]) ⇒ Sharp

使用这些 TIFF 选项输出图像。

可以通过 withMetadata 以像素/英寸为单位设置密度,而不必以像素/毫米为单位提供 xres 和 yres。

Throws:

  • 错误 选项无效
参数类型默认描述
[options]Object输出选项
[options.quality]number80质量,整数 1-100
[options.force]booleantrue强制 TIFF 输出,否则尝试使用输入格式
[options.compression]string"'jpeg'"压缩选项:无、jpeg、deflate、packbits、ccittfax4、lzw、webp、zstd、jp2k
[options.predictor]string"'horizontal'"压缩预测器选项:无、水平、浮点
[options.pyramid]booleanfalse编写图像金字塔
[options.tile]booleanfalse编写平铺tiff
[options.tileWidth]number256水平平铺大小
[options.tileHeight]number256垂直平铺尺寸
[options.xres]number1.0水平分辨率(像素/毫米)
[options.yres]number1.0垂直分辨率(像素/毫米)像素/毫米
[options.resolutionUnit]string"'inch'"分辨率单位选项:英寸、厘米
[options.bitdepth]number8将位深度降低为 1、2 或 4位
[options.miniswhite]booleanfalse将 1 位图像写入 miniswhite

示例

// Convert SVG input to LZW-compressed, 1 bit per pixel TIFF output
sharp('input.svg')
  .tiff({
    compression: 'lzw',
    bitdepth: 1
  })
  .toFile('1-bpp-output.tiff')
  .then(info => { ... });

avif

avif([options]) ⇒ Sharp

使用这些 AVIF 选项输出图像。

不支持 AVIF 图像序列。预构建的二进制文件仅支持 8 位深度。

Throws:

  • 错误 选项无效

: 0.27.0

参数类型默认描述
[options]Object输出选项
[options.quality]number50质量,整数 1-100
[options.lossless]booleanfalse使用无损压缩
[options.effort]number4CPU 工作量,介于 0(最快)和 9(最慢)之间
[options.chromaSubsampling]string"'4:4:4'"设置为“4:2:0”以使用色度子采样
[options.bitdepth]number8将位深度设置为 8、10 或 12位

示例

const data = await sharp(input)
  .avif({ effort: 2 })
  .toBuffer();

示例

const data = await sharp(input)
  .avif({ lossless: true })
  .toBuffer();

heif

heif(options) ⇒ Sharp

使用这些 HEIF 选项输出图像。

使用 hevc 压缩支持受专利保护的 HEIC 图像需要使用全局安装的 libvips,该 libvips 编译时支持 libheif、libde265 和 x265。

Throws:

  • 错误 选项无效

: 0.23.0

参数类型默认描述
optionsObject输出选项
options.compressionstring压缩格式:av1、hevc
[options.quality]number50质量,整数 1-100
[options.lossless]booleanfalse使用无损压缩
[options.effort]number4CPU 工作量,介于 0(最快)和 9(最慢)之间
[options.chromaSubsampling]string"'4:4:4'"设置为“4:2:0”以使用色度子采样
[options.bitdepth]number8将位深度设置为 8、10 或 12 位

示例

const data = await sharp(input)
  .heif({ compression: 'hevc' })
  .toBuffer();

jxl

jxl([options]) ⇒ Sharp

使用这些 JPEG-XL (JXL) 选项输出图像。

此功能为实验性功能,请勿在生产系统中使用。

需要使用 libjxl 支持编译的 libvips。预构建的二进制文件不包含此功能 - 请参阅安装自定义 libvips。

不支持图像元数据(EXIF、XMP)。

Throws:

  • 错误无效选项

: 0.31.3

参数类型默认描述
[options]Object输出选项
[options.distance]number1.0最大编码错误,介于 0(最高品质)和 15(最低品质)之间
[options.quality]number根据 JPEG 类品质计算距离,介于 1 和 100 之间,如果指定
[options.decodingTier]number0目标解码速度等级,介于 0(最高品质)和 4(最低品质)之间
[options.lossless]booleanfalse使用无损压缩
[options.effort]number7CPU 工作量,介于 3(最快)和 9(最慢)之间

raw

raw([options]) ⇒ Sharp

强制输出为原始、未压缩的像素数据。像素排序为从左到右、从上到下,无填充。对于非灰度色彩空间,通道排序将为 RGB 或 RGBA。

Throws:

  • 错误 选项无效
参数类型默认描述
[options]Object输出选项
[options.depth]string"'uchar'"位深度,以下之一:char、uchar(默认)、short、ushort、int、uint、float、complex、double、 dpcomplex

示例

// Extract raw, unsigned 8-bit RGB pixel data from JPEG input
const { data, info } = await sharp('input.jpg')
  .raw()
  .toBuffer({ resolveWithObject: true });

示例

// Extract alpha channel as raw, unsigned 16-bit pixel data from PNG input
const data = await sharp('input.png')
  .ensureAlpha()
  .extractChannel(3)
  .toColourspace('b-w')
  .raw({ depth: 'ushort' })
  .toBuffer();

tile

tile([options]) ⇒ Sharp

使用基于图块的深度缩放(图像金字塔)输出。

通过 toFormat、jpeg、png 或 webp 函数设置图块图像的格式和选项。使用带有 toFile 的 .zip 或 .szi 文件扩展名写入压缩存档文件格式。

当输出为缓冲区或流时,容器将设置为 zip,否则将默认为 fs。

需要使用 libgsf 支持编译的 libvips。预构建的二进制文件不包含此功能 - 请参阅安装自定义 libvips。

Throws:

  • 错误 参数无效
参数类型默认描述
[options]Object
[options.size]number256瓷砖像素大小,取值范围为 1 到 8192。
[options.overlap]number0图块重叠,取值范围为 0 到 8192。
[options.angle]number0图块旋转角度,必须是90.
[options.background]string | Object"{r: 255, g: 255, b: 255, alpha: 1}"背景颜色,由颜色模块解析,默认为白色,不透明。
[options.depth]string金字塔的深度,可能的值是一像素、一个图块或一个,默认值基于布局。
[options.skipBlanks]number-1跳过图块生成的阈值。8 位图像的范围为 0-255,16 位图像的范围为 0-65535。对于 Google 布局,默认值为 5,否则为 -1(不跳过)。
[options.container]string"'fs'"tile 容器,值为 fs(文件系统)或 zip(压缩文件)。
[options.layout]string"'dz'"文件系统布局,可能的值为 dz、iiif、iiif3、zoomify 或 google。
[options.centre]booleanfalse图块中的中心图像。
[options.center]booleanfalsecenter 的替代拼写。
[options.id]string"'https://example.com/iiif' ;"当布局为 iiif/iiif3 时,设置 info.json 的 @id/id 属性
[options.basename]string当容器为 zip 时,zip 文件内的目录名称。

示例

sharp('input.tiff')
  .png()
  .tile({
    size: 512
  })
  .toFile('output.dz', function(err, info) {
    // output.dzi is the Deep Zoom XML definition
    // output_files contains 512x512 tiles grouped by zoom level
  });

示例

const zipFileWithTiles = await sharp(input)
  .tile({ basename: "tiles" })
  .toBuffer();

示例

const iiififier = sharp().tile({ layout: "iiif" });
readableStream
  .pipe(iiififier)
  .pipe(writeableStream);

timeout

timeout(options) ⇒ Sharp

设置处理超时时间(以秒为单位)。使用零值可无限期继续处理,这是默认行为。

当 libvips 打开输入图像进行处理时,时钟开始计时。等待 libuv 线程可用的时间不包括在内。

: 0.29.2

参数类型描述
optionsObject
options.secondsnumber处理将在多少秒后完成已停止

示例

// Ensure processing takes no longer than 3 seconds
try {
  const data = await sharp(input)
    .blur(1000)
    .timeout({ seconds: 3 })
    .toBuffer();
} catch (err) {
  if (err.message.includes('timeout')) { ... }
}
本页目录