通过Javascript确定图像文件大小+尺寸?
作为Web应用程序的一部分,一旦图像下载并呈现在网页上,我需要在浏览器上下文中确定图像的文件大小(kb)和分辨率(例如,我可以在页面上显示该信息这需要在客户端完成,显然必须能够在没有ActiveX控件或Java applet(IE7 +,FF3 +,Safari 3 +,IE6)的情况下解决X浏览器,尽管它不必每个浏览器都是相同的解决方案
理想情况下,这将使用系统的Javascript来完成,但如果我绝对需要一个JQuery或类似的库(或它的一小部分),可以做到这一点。
编辑 :
要获取DOM元素的当前浏览器内像素大小(在您的情况下为IMG元素),不包括边框和边距,可以使用clientWidth和clientHeight属性。
var img = document.getElementById('imageId'); var width = img.clientWidth; var height = img.clientHeight;
现在要获取文件大小,现在我只能考虑Internet Explorer公开的文件和IMG元素的fileSize属性 …
编辑2:有些东西出现在我的脑海里
要获取服务器上托管文件的大小,您可以简单地使用Ajax创建一个HEAD HTTP请求 。 这种请求是用来获取请求隐含的url的元信息,而不是在响应中传递它的任何内容。
在HTTP请求结束时,我们可以访问响应HTTP头,包括代表文件大小的Content-Length(以字节为单位)。
使用原始XHR的基本示例:
var xhr = new XMLHttpRequest(); xhr.open('HEAD', 'img/test.jpg', true); xhr.onreadystatechange = function(){ if ( xhr.readyState == 4 ) { if ( xhr.status == 200 ) { alert('Size in bytes: ' + xhr.getResponseHeader('Content-Length')); } else { alert('ERROR'); } } }; xhr.send(null);
注意:请记住,当您执行Ajax请求时,您受限于相同的来源策略 ,它允许您仅在同一个域内发出请求。
在这里检查一个概念的工作证明。
编辑3:
1.)关于Content-Length,我认为如果服务器的响应是gzip,可能会发生大小不匹配的情况,你可以做一些测试,看看是否发生在你的服务器上。
2.)为了获得图像的原始尺寸,您可以编程创建一个IMG元素,例如:
var img = document.createElement('img'); img.onload = function () { alert(img.width + ' x ' + img.height); }; img.src='http://sstatic.net/so/img/logo.png';
使用Javascript检查上传的图片大小
<script type="text/javascript"> function check(){ var imgpath=document.getElementById('imgfile'); if (!imgpath.value==""){ var img=imgpath.files[0].size; var imgsize=img/1024; alert(imgsize); } } </script>
HTML代码
<form method="post" enctype="multipart/form-data" onsubmit="return check();"> <input type="file" name="imgfile" id="imgfile"><br><input type="submit"> </form>
服务人员可以访问标题信息,包括Content-Length
标题。
服务人员的理解有点复杂,所以我建立了一个名为sw-get-headers的小型库。
比你需要:
- 订阅图书馆的
response
事件 - 在所有网络请求中识别图像的URL
- 在这里你可以阅读
Content-Length
头文件!
请注意,您的网站需要使用HTTPS才能使用服务人员, 浏览器需要与服务人员兼容 ,并且图像必须与页面位于相同的原始位置 。
您可以使用getElement(...).width
和...height
来获取尺寸。
由于JavaScript由于安全原因无法访问本地磁盘上的任何内容,因此无法检查本地文件。 浏览器缓存中的文件也是如此。
你真的需要一个可以处理AJAX请求的服务器。 在该服务器上,安装下载映像并将数据流保存在只输出字节的虚拟输出中的服务。 请注意,由于图像数据可能被编码,因此不能始终依赖Content-length标题字段。 否则,发送HTTP HEAD请求就足够了。
这个怎么样:
var imageUrl = 'Sites/stackoverflow/img/sprites.svg'; var blob = null; var xhr = new XMLHttpRequest(); xhr.open('GET', imageUrl, true); xhr.responseType = 'blob'; xhr.onload = function() { blob = xhr.response; console.log(blob, blob.size); } xhr.send();
http://qnimate.com/javascript-create-file-object-from-url/
由于同源政策 ,只能在同一来源下工作
你可以使用类似的东西在页面上找到图片的尺寸
document.getElementById('someImage').width
文件大小,但是,你将不得不使用服务器端的东西
大多数人已经回答了如何下载图像的尺寸可以知道,所以我只是试图回答问题的其他部分 – 知道下载的图像的文件大小。
你可以使用资源时间API做到这一点。 非常特别的transferSize,encodedBodySize和decodedBodySize属性可用于此目的。
查看我的答案在这里的代码段和更多的信息,如果你想要的: JavaScript的 – 获取大小的字节从HTML IMG SRC
var img = new Image(); img.src = sYourFilePath; var iSize = img.fileSize;
你唯一能做的就是把图像上传到服务器,并用C#等服务器端语言检查图像的大小和尺寸。
编辑:
您的需求不能使用JavaScript来完成。