使用 HTML Canvas + Javascript 优化图像 + 减小文件大小
Using HTML Canvas + Javascript to optimize and image + reduce filesize
我正在制作一个 Chrome 扩展程序,它会自动截取可见选项卡的屏幕截图并将 JPG 下载到您的文件系统。一切正常,但图像非常大(1280x720px 图像约 400kb),我想优化它们(理想情况下约为 40kb)。
这是我使用的代码:
var image = new Image();
image.onload = function() {
var canvas = screenshot.content;
canvas.width = image.width;
canvas.height = image.height;
var context = canvas.getContext("2d");
context.drawImage(image, 0, 0);
// save the image
var link = document.createElement('a');
link.download = shotname + ".jpg";
link.href = screenshot.content.toDataURL();
link.click();
screenshot.data = '';
};
image.src = screenshot.data;
如何优化图像以降低质量和文件大小?我想尝试不同的质量选项,以便了解可接受的用例是什么。
您可以将 url 编码为 jpg 格式。
第二个参数指定生成的 jpg 的质量。
link.href = screenshot.content.toDataURL('image/jpeg', 0.6);
您可以使用 JPEG 和这样的质量设置:
link.href = screenshot.content.toDataURL("image/jpeg", 0.3);
质量在 [0, 1] 范围内。如果不指定任何图片类型,默认为PNG,很多情况下比较大。
请注意,使用 JPEG 时会丢失 alpha 通道。
此外,您可以稍微模糊图像(参见 f.ex。我的 realtime-blur or stack-box blur)。模糊过滤一些难以压缩的高频。
我正在制作一个 Chrome 扩展程序,它会自动截取可见选项卡的屏幕截图并将 JPG 下载到您的文件系统。一切正常,但图像非常大(1280x720px 图像约 400kb),我想优化它们(理想情况下约为 40kb)。
这是我使用的代码:
var image = new Image();
image.onload = function() {
var canvas = screenshot.content;
canvas.width = image.width;
canvas.height = image.height;
var context = canvas.getContext("2d");
context.drawImage(image, 0, 0);
// save the image
var link = document.createElement('a');
link.download = shotname + ".jpg";
link.href = screenshot.content.toDataURL();
link.click();
screenshot.data = '';
};
image.src = screenshot.data;
如何优化图像以降低质量和文件大小?我想尝试不同的质量选项,以便了解可接受的用例是什么。
您可以将 url 编码为 jpg 格式。
第二个参数指定生成的 jpg 的质量。
link.href = screenshot.content.toDataURL('image/jpeg', 0.6);
您可以使用 JPEG 和这样的质量设置:
link.href = screenshot.content.toDataURL("image/jpeg", 0.3);
质量在 [0, 1] 范围内。如果不指定任何图片类型,默认为PNG,很多情况下比较大。
请注意,使用 JPEG 时会丢失 alpha 通道。
此外,您可以稍微模糊图像(参见 f.ex。我的 realtime-blur or stack-box blur)。模糊过滤一些难以压缩的高频。