使用atob()将画布的文件大小返回到DataUrl()
Returning file size of canvas toDataUrl() using atob()
我正试图从URL将图像加载到画布中,然后获取数据URL并使用它来确定图像的大小。
结果是,图像显示出比它应该大得多
例如,加载60kb的图像会导致解码变量返回134kb。
当我在电脑上本地存储的图像上运行相同的代码时,从文件输入中获取文件对象,返回的值是正确的(例如60kb)。
这是我正在使用的代码:
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var img = '/anImage.jpg';
var image = document.createElement('img');
image.src = img;
ctx.drawImage(image, 500, 500);
ctx.drawImage(image, img.width, img.height);
var dataUrl = canvas.toDataURL('image/jpeg');
var d = dataUrl.substr(dataUrl.indexOf('base64,') + 7);
var decoded = atob(d);
var size = decoded.length;
我已经尝试使用dataUrl再次输出图像并保存它…这仍然导致图像为134kb,而不是60Kb的原始大小。
我知道base64编码会使图像大1.37倍左右,但从文件输入中获取图像对象时,该值是正确的。
我不确定压缩级别是否丢失了?或者我是否可以以某种方式从文件对象中获得它,然后使用它为toDataUrl()函数设置第二个参数?
我在网上找不到任何与此相关的信息,因此任何信息都将不胜感激:)
要获得以字节为单位的图像大小,可以对托管图像的图像执行简单的HEAD
请求。
例如:
var xhr = new XMLHttpRequest();
xhr.open( 'HEAD', '/anImage.jpg', true );
xhr.onreadystatechange = function(){
if ( xhr.readyState == 4 ) {
if ( xhr.status == 200 ) {
console.log( 'size: ' + xhr.getResponseHeader( 'Content-Length' ) );
}
}
};
xhr.send(null);
相关文章:
- 预编译的车把模板使文件大小加倍
- 请求准备一个文件并返回路径,允许用户在准备好时下载
- Node.js:在修改时确定文件大小
- 使用ajax获取通过FTP上传的文件的文件大小——试图防止ajax中断自身
- 从多个文件上传中检索文件大小
- 在 Node.JS 中,如何从单独的.js文件中返回整个对象
- 文件大小的进度指示器
- Dropzone最大文件大小超过事件
- expressjs文件上传,检查是否确实有文件发送,指定最大文件大小&保留它的名字
- 使用Javascript数组检测媒体文件并返回所有URL
- 可以使用Plupload调整文件大小以获得更多大小
- 如何通过javascript导入.ics文件并返回议程
- Apache poi XSSF创建Excel文件-Create返回格式或文件扩展名无效的空文件
- toDataURL()文件大小增加
- Javascript人类可读文件大小
- 节点可执行文件中返回了错误的pid
- 是否有一种方法可以限制要上传到客户端服务器的文件大小
- Firefox 14.0.1在读取通过AJAX发送的JSON文件时返回错误
- Javascript 在使用 ASP.NET(aspx 页)进行上传时返回错误的文件大小
- DataTransferItem.getAsFile()返回的文件大小比原始文件大得多