【问题标题】:Node/Sharp: Resizing thumbnails produces much larger images than expectedNode/Sharp:调整缩略图大小会产生比预期大得多的图像
【发布时间】:2021-03-14 07:58:30
【问题描述】:

我正在创建一个函数来调整 youtube-dl 下载的缩略图大小。 youtube-dl 下载 4 个缩略图,但它们的尺寸不符合我的需要,因此必须调整它们的大小。因为我需要的图像小于 youtube-dl 下载的最大缩略图,所以该大缩略图用作创建调整大小缩略图的基础。

这是我用来调整缩略图大小的函数:

import fs from 'fs-extra';
import sharp from 'sharp';

let thumbnailData = fs.readFileSync('D:/original 1280x720 (122,346 bytes).jpg');

await generateThumbnailFile(thumbnailData, 720, 405, 'D:/medium resized 720x405 (329,664 bytes).jpg');
await generateThumbnailFile(thumbnailData, 168, 95, 'D:/small resized 168x95 (26,246 bytes).jpg');

const generateThumbnailFile = async (sourceData, width, height, filepath) => {
    try {
        const data = await sharp(sourceData)
            .resize({ width: width, height: height, fit: sharp.fit.inside })
            .jpeg({ quality: 100, chromaSubsampling: '4:4:4' })
            .toBuffer();
        fs.writeFileSync(filepath, data);
    } catch (err) {
        throw err;
    }
}

但是,我调整大小的缩略图的大小比我预期的要大得多。中等大小的缩略图的文件大小几乎是最大原始缩略图的三倍,而小尺寸的缩略图的文件大小是其可比较的原始缩略图的近三倍。

我可以做些什么来减小调整后缩略图的文件大小?

【问题讨论】:

    标签: node.js sharp


    【解决方案1】:

    答案很简单——你用quality: 100把它改成更小的数字80-95,生成的文件应该更小。如果你使用 100 的质量在 jpeg 中是浪费空间。

    这里有一个指向页面的链接,可以显示压缩到不同质量级别的不同图像:http://regex.info/blog/lightroom-goodies/jpeg-quality 你可以在那里看到 100% 通常比其他文件大很多(有时甚至大两倍)。

    因此,仅使用 80-90% 就足够了,文件大小也不是那么大(因为可能输入文件质量未设置为 100,调整大小 + 质量设置为 100 可能会产生比源文件更大的文件)。

    【讨论】:

    • FWIW WordPress 使用 82 或 86 来衡量其质量。对于大多数用例来说,这应该足够了。除非您使用无损压缩或压缩未压缩的输入,否则选择 100% 质量可能会产生比原始文件更大的文件。
    • 嗨,你能看看这个问题吗,非常感谢任何可能的帮助。 stackoverflow.com/questions/65465145/…
    猜你喜欢
    • 2011-09-03
    • 2011-06-03
    • 2012-01-06
    • 2015-07-16
    • 2013-06-22
    • 2013-06-24
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    相关资源
    最近更新 更多