gpt4 book ai didi

javascript - Canvas toDataUrl 增加图像的文件大小

转载 作者:可可西里 更新时间:2023-11-01 01:18:05 24 4
gpt4 key购买 nike

当使用 toDataUrl() 设置图像标签的来源时,我发现保存的图像比原始图像大很多。

在下面的示例中,我没有为 toDataUrl 函数指定第二个参数,因此使用了默认质量。这导致图像比原始图像尺寸大得多。当为全质量指定 1 时,生成的图像甚至更大。

有谁知道为什么会发生这种情况,或者我该如何阻止它?

            // create image
var image = document.createElement('img');

// set src using remote image location
image.src = 'test.jpg';

// wait til it has loaded
image.onload = function (){

// set up variables
var fWidth = image.width;
var fHeight = image.height;

// create canvas
var canvas = document.createElement('canvas');
canvas.id = 'canvas';
canvas.width = fWidth;
canvas.height = fHeight;
var context = canvas.getContext('2d');

// draw image to canvas
context.drawImage(image, 0, 0, fWidth, fHeight, 0, 0, fWidth, fHeight);

// get data url
dataUrl = canvas.toDataURL('image/jpeg');

// this image when saved is much larger than the image loaded in
document.write('<img src="' + dataUrl + '" />');

}

谢谢你:D

这是一个例子,不幸的是图像不能跨域,所以我不得不拉一个 jsfiddle 图像。

http://jsfiddle.net/ptSUd/

图像是 7.4kb,如果您随后保存正在输出的图像,您将看到它是 10kb。图像越详细,差异越明显。如果将 toDataUrl 质量设置为 1,则图像为 17kb。

我也为此使用 FireFox 10,当使用 Chrome 时,图像尺寸仍然更大,但没有那么多。

最佳答案

toDataURL()方法返回的字符串不代表原始数据。

我刚刚进行了一些广泛的测试,结果表明创建的数据 URL 取决于浏览器(在操作系统上)。

 Environment             -    md5 sum                       - file size
Original file - c9eaf8f2aeb1b383ff2f1c68c0ae1085 - 4776 bytes
WinXP Chrome 17.0.963.79 - 94913afdaba3421da6ddad642132354a - 7702 bytes
Linux Chrome 17.0.963.79 - 94913afdaba3421da6ddad642132354a - 7702 bytes
Linux Firefox 10.0.2 - 4f184006e00a44f6f2dae7ba3982895e - 3909 bytes

获取数据 URI 的方法无关紧要,以下代码片段用于验证文件上传的数据 URI 是否也不同:

测试用例:http://jsfiddle.net/Fkykx/

<input type="file" id="file"><script>
document.getElementById('file').onchange=function() {
var filereader = new FileReader();
filereader.onload = function(event) {
var img = new Image();
img.onload = function() {
var c = document.createElement('canvas'); // Create canvas
c.width = img.width;
c.height = img.height; c.getContext('2d').drawImage(img,0,0,img.width,img.height);
var toAppend = new Image;
toAppend.title = 'Imported via upload, drawn in a canvas';
toAppend.src = c.toDataURL('image/png');
document.body.appendChild(toAppend);
}
img.src = event.target.result; // Set src from upload, original byte sequence
img.title = 'Imported via file upload';
document.body.appendChild(img);
};
filereader.readAsDataURL(this.files[0]);
}
</script>

关于javascript - Canvas toDataUrl 增加图像的文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9773154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com