14

我们正在 Chrome 浏览器中捕获可见选项卡(通过使用扩展 API chrome.tabs.captureVisibleTab)并接收数据 URI 方案(Base64 编码字符串)中的快照。

是否有可用于将图像缩小到特定大小的 JavaScript 库?

目前我们正在通过 CSS 对其进行样式设置,但由于图片通常比所需的大 100 倍,因此必须付出性能代价。另一个问题是我们用来保存快照的 localStorage 的负载。

有谁知道一种方法来处理这种数据 URI 方案格式的图片并通过缩小它们来减小它们的大小?

参考:

4

2 回答 2

22

这是一个应该做你需要的功能。你给它一个图像的 URL(例如,来自 的结果chrome.tabs.captureVisibleTab,但它可以是任何 URL)、所需的大小和一个回调。它异步执行,因为无法保证设置src属性时立即加载图像。使用数据 URL 可能会,因为它不需要下载任何东西,但我还没有尝试过。

回调将结果图像作为数据 URL 传递。请注意,生成的图像将是 PNG,因为 Chrome 的实现toDataURL不支持 image/jpeg。

function resizeImage(url, width, height, callback) {
    var sourceImage = new Image();

    sourceImage.onload = function() {
        // Create a canvas with the desired dimensions
        var canvas = document.createElement("canvas");
        canvas.width = width;
        canvas.height = height;

        // Scale and draw the source image to the canvas
        canvas.getContext("2d").drawImage(sourceImage, 0, 0, width, height);

        // Convert the canvas to a data URL in PNG format
        callback(canvas.toDataURL());
    }

    sourceImage.src = url;
}
于 2010-03-26T05:48:35.827 回答
2

至于性能问题,也许画布标签会有所帮助?https://developer.mozilla.org/en/Canvas_tutorial/Using_images#drawImage_example_2

如果加载图像,用drawImage显示,然后尝试丢弃它,你可能会成功。但我不确定如何将画布序列化为图像以​​保存调整大小的文件......

于 2010-03-25T16:38:36.713 回答