【问题标题】:How to configure sharp so it can convert jpg/png to webp,avif and then compress them by 25%?如何配置 sharp 以便它可以将 jpg/png 转换为 webp、avif,然后将它们压缩 25%?
【发布时间】:2023-01-30 13:50:41
【问题描述】:

如何配置 sharp 以便它可以将 'src/images/' 中的所有 jpg/png 转换为 webp、avif,然后将它们压缩 25%?另外,我想压缩 svg 而不进行转换。结果文件应位于“dist/assets/images/”中。 Sharp 的文档并不直观,因此初学者很难理解。这就是我尝试做的(我知道它看起来不正确,但这就是我询问解决方案的原因):

import sharp from 'sharp';

sharp('jpg, png')
  .toFormat('webp, avif')
  .webp({ quality: 75 })
  .avif({ quality: 75 })
  .svg({ quality: 75 })
  .toFile('dist/assets/images/');

附言 我正在使用 Vite,所以也许还有另一种更简单的方法可以为 Vite 做同样的事情。

【问题讨论】:

    标签: image image-processing optimization compression sharp


    【解决方案1】:

    https://sharp.pixelplumbing.com/api-constructor

    文档的 api-constructor 部分现在具有 cmet 和代码示例,可读性很强,如果您仍然需要 Sharp 的任何内容,我建议您检查一下。

    Sharp 是一个将单个文件作为参数的工厂,带有一个可选的选项对象。如果你想转换 jpg,你可能会更幸运地使用 sharp('filenameString.jpg').webp({quality: 75}) 之类的东西,然后从那里链接你的方法。

    对于您的问题,遍历所需路径中的所有文件,并将它们的文件名作为字符串传递给 sharp。从那里继续你的方法链接。

    最后,.toFile('.path/filename') 方法不仅将它放在路径中的那个位置,它还命名您的文件。您应该为该路径中的每个文件使用唯一的文件名,以免意外覆盖任何内容。这通常是使用 Date() 并将当前时间作为字符串与您想要的文件名连接起来完成的。前任。

    const time = new Date().toISOString()
    const ref = time + originalname + '.webp'
    sharp('inputFilename.jpg').toFile('./path/' + ref)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-24
      • 2021-06-18
      • 2020-03-08
      • 2016-11-24
      • 2010-11-15
      • 1970-01-01
      • 2022-11-22
      相关资源
      最近更新 更多