使用 GraphicsMagick 优化图像
Optimize image with GraphicsMagick
我在 node.js 中使用 GraphicsMagick,我有很多(数千个)需要尽可能优化。每个都是 250*250 PX,我需要把它们做成 50*50,但这是简单的部分。
问题是如何优化它们。
通过优化它们,我的意思是将它们变成 jpeg 或 png(哪个更小)并降低质量(如果需要)和其他东西...
到目前为止我的代码...
gm(temp_location + file_name)
.gravity('Center')
.extent(50, 50)
.noProfile()
.write(new_location + "s"+name, function (err) {});
关于如何缩小图像有什么建议吗?
任何建议表示赞赏
对于 JPEG(最适合照片和其他自然图像),降低质量(即图像质量)会有帮助。尝试 -quality 40 或更低。
对于 PNG(最适合艺术线条),将颜色限制为 254 或更少并提高质量(这实际上意味着压缩级别)可能会有所帮助。对于颜色数量有限的 PNG,使用 "quality",它是 10 的偶数倍,因为第二位指定 PNG 过滤方法,应该为“0”,表示不过滤。尝试 -quality 90.
上述答案的补充,关于 GIF 格式优化。
GraphicsMagick documentation关于JPEG或PNG压缩非常清楚但是当输出GIF文件时(这是我的情况......),这些压缩功能似乎并不适用。
我使用以下代码成功地将我的 GIF 输出文件大小减小了 52%:
var gm = require('gm');
gm()
.in(input_filename1)
.in(input_filename2)
.bitdepth(8)
.colors(192)
.dither(false)
.filter('Point') // filter before resize to have a 'sharp big pixels' aspect
.antialias(false)
.resize(magnify_factor*size_x, magnify_factor*size_y, "!")
.write(output_filename, function (err) {
if (!err) console.log('gif file created!');
});
这是我尝试过但在处理 GIF 时似乎没有效果的其他功能
.limit("disk", "500KB")
// this limits resource used but does not limit the output filesize
.quality(10)
.compress('LZW')
我在 node.js 中使用 GraphicsMagick,我有很多(数千个)需要尽可能优化。每个都是 250*250 PX,我需要把它们做成 50*50,但这是简单的部分。
问题是如何优化它们。
通过优化它们,我的意思是将它们变成 jpeg 或 png(哪个更小)并降低质量(如果需要)和其他东西...
到目前为止我的代码...
gm(temp_location + file_name)
.gravity('Center')
.extent(50, 50)
.noProfile()
.write(new_location + "s"+name, function (err) {});
关于如何缩小图像有什么建议吗?
任何建议表示赞赏
对于 JPEG(最适合照片和其他自然图像),降低质量(即图像质量)会有帮助。尝试 -quality 40 或更低。
对于 PNG(最适合艺术线条),将颜色限制为 254 或更少并提高质量(这实际上意味着压缩级别)可能会有所帮助。对于颜色数量有限的 PNG,使用 "quality",它是 10 的偶数倍,因为第二位指定 PNG 过滤方法,应该为“0”,表示不过滤。尝试 -quality 90.
上述答案的补充,关于 GIF 格式优化。
GraphicsMagick documentation关于JPEG或PNG压缩非常清楚但是当输出GIF文件时(这是我的情况......),这些压缩功能似乎并不适用。
我使用以下代码成功地将我的 GIF 输出文件大小减小了 52%:
var gm = require('gm');
gm()
.in(input_filename1)
.in(input_filename2)
.bitdepth(8)
.colors(192)
.dither(false)
.filter('Point') // filter before resize to have a 'sharp big pixels' aspect
.antialias(false)
.resize(magnify_factor*size_x, magnify_factor*size_y, "!")
.write(output_filename, function (err) {
if (!err) console.log('gif file created!');
});
这是我尝试过但在处理 GIF 时似乎没有效果的其他功能
.limit("disk", "500KB")
// this limits resource used but does not limit the output filesize
.quality(10)
.compress('LZW')