Sharp 处理图像

JiHua
2024-06-11
18

在使用 Sharp 处理图像时,除了常见的 quality 和 lossless 等选项外,Sharp 提供了多个配置选项来帮助你更精确地控制图像处理的各个方面。这些选项根据图像格式的不同而有所差异。以下是 Sharp 的一些常用配置选项:

1.JPG(JPEG)格式选项

quality:压缩质量,范围 0-100,数值越高图像质量越好,文件越大(默认值为 80)。
progressive:是否启用渐进式 JPEG。设置为 true 时,图像加载时逐步显示(默认值为 false)。
optimizeScans:优化扫描顺序,适用于渐进式 JPEG,减少文件大小(默认值为 false)。
chromaSubsampling:色度子采样,通常用于降低文件大小(4:4:4, 4:2:2, 4:2:0)。

sharp(buffer)
  .jpeg({
    quality: 85,
    progressive: true,
    optimizeScans: true,
    chromaSubsampling: '4:2:0',
  })
  .toFile(outputFilePath);

2.WebP 格式选项

quality:压缩质量,范围 0-100(默认值为 80)。
lossless:是否使用无损压缩,设置为 true 时图像质量不损失,但文件大小较大。
nearLossless:接近无损压缩,设置为 true 时,图像质量接近无损,文件更小(默认值为 false)。
alphaQuality:控制透明度通道(alpha channel)的压缩质量,0-100。
compressionLevel:控制 WebP 的压缩级别,0-6,数字越大压缩越强,文件越小,但处理时间会增加。

sharp(buffer)
  .webp({
    quality: 80,
    lossless: false,
    nearLossless: true,
    alphaQuality: 90,
    compressionLevel: 4,
  })
  .toFile(outputFilePath);

3. PNG 格式选项

compressionLevel:压缩级别,0-9,数字越大,压缩越强,文件越小(默认值为 6)。
adaptiveFiltering:启用自适应过滤来优化压缩,通常可以提供更好的压缩效果(默认值为 false)。
palette:生成调色板图像,通常用于有少量颜色的图像,文件大小更小。
bitdepth:控制图像的位深,适用于 1、2、4、8 或 16 位的颜色图像。

sharp(buffer)
  .png({
    compressionLevel: 9,
    adaptiveFiltering: true,
    palette: true,
    bitdepth: 8,
  })
  .toFile(outputFilePath);

4. TIFF 格式选项

compression:设置 TIFF 的压缩方式,可以选择 none、lzw、jpeg 或 zip(默认值为 none)。
quality:设置 JPEG 压缩质量,仅在使用 jpeg 压缩时有效。
bitdepth:设置位深度,支持 1、2、4、8、16、32 位深度。
示例:

sharp(buffer)
  .tiff({
    compression: 'lzw',
    quality: 85,
    bitdepth: 8,
  })
  .toFile(outputFilePath);
  

5. 其他常见选项

rotate(angle):旋转图像,支持传递角度值(例如 90、180、270 等)。如果图像包含 EXIF 旋转信息,Sharp 会自动进行旋转。

示例:

// 垂直翻转图像。
sharp(buffer)
  .rotate(90)  // 旋转 90 度
  .toFile(outputFilePath);
flip();

// 水平翻转图像。
sharp(buffer)
  .flip()
  .toFile(outputFilePath);
flop():
// 调整图像大小,可以指定宽度和高度,支持比例缩放等设置。
sharp(buffer)
  .flop()
  .toFile(outputFilePath);
resize(width, height, options):
// 从图像中提取某个区域。可以传递一个包含 left、top、width、height 的对象来指定提取区域。
sharp(buffer)
  .resize(800, 600)  // 调整为 800x600
  .toFile(outputFilePath);
extract(options):
// 对图像进行锐化处理,提升细节和清晰度。
sharp(buffer)
  .extract({ left: 100, top: 100, width: 200, height: 200 })  // 提取 100,100 到 200x200 的区域
  .toFile(outputFilePath);
sharpen(options):
// 模糊图像,指定半径来控制模糊程度。
sharp(buffer)
  .sharpen()
  .toFile(outputFilePath);
blur(radius):

sharp(buffer)
  .blur(5)  // 模糊程度为 5
  .toFile(outputFilePath);
  

6. 输出设置

toBuffer():如果你希望获得图像的二进制数据,而不是保存到文件,可以使用 toBuffer() 方法。

示例:

sharp(buffer)
  .resize(800, 600)
  .toBuffer()
  .then((data) => {
    console.log('Buffer size:', data.length);
  });
toFile(outputPath, callback):保存图像到文件。

sharp(buffer)
  .resize(800, 600)
  .toFile(outputFilePath, (err, info) => {
    if (err) {
      console.error('Error:', err);
    } else {
      console.log('File saved:', info);
    }
  });

总结:
Sharp 提供了许多有用的配置选项,可以帮助你精细调整图像处理的效果。你可以根据具体需求设置不同的压缩质量、格式选项、图像处理效果(如旋转、裁剪、锐化等)。通过结合这些选项,你可以有效地控制图像的输出质量和文件大小。

标签:Sharp 处理图像