上传图片获取图片信息(兼容IE和火狐)
在开发Web应用时,我们经常需要处理用户上传的图片,包括获取图片的元数据,如尺寸、类型等。本文将详细讲解如何在JavaScript中实现一个跨浏览器(包括IE和Firefox)的图片信息获取方法。 我们需要理解浏览器对图片文件的处理方式。在HTML5中,`<input type="file">`元素可以用于让用户选择本地文件,通过File API我们可以访问到这些文件。然而,不同的浏览器可能对File API的支持程度不同,特别是老版本的IE浏览器。 1. **FileReader接口**:这是获取图片信息的关键。`FileReader`对象提供了读取文件的方法,如`readAsDataURL()`,它可以把文件读取为DataURL,即一个包含base64编码的图片数据字符串。在这个过程中,我们可以通过监听`load`事件来获取读取完成后的结果。 ```javascript var fileInput = document.querySelector('input[type="file"]'); fileInput.addEventListener('change', function(event) { var file = event.target.files[0]; if (!file) return; var reader = new FileReader(); reader.onload = function(e) { var dataUrl = e.target.result; // 处理dataUrl }; reader.readAsDataURL(file); }); ``` 2. **兼容IE**:IE9及以下版本不支持`FileReader`,但它们提供了ActiveXObject,可以通过`new ActiveXObject("Microsoft.XMLDOM")`创建XML DOM对象,然后利用`load`方法加载图片文件,解析出DataURL。 ```javascript if (window.ActiveXObject) { var activeXObj = new ActiveXObject("Microsoft.XMLDOM"); activeXObj.async = "false"; activeXObj.load(file); var dataUrl = activeXObj.documentElement.innerText; } ``` 3. **获取图片元数据**:一旦有了DataURL,我们可以通过创建`Image`对象并赋值给`src`属性来预加载图片,然后通过`naturalWidth`和`naturalHeight`属性获取原始尺寸,通过`src`属性获取MIME类型。 ```javascript var img = new Image(); img.src = dataUrl; img.onload = function() { var width = img.naturalWidth; var height = img.naturalHeight; var mimeType = img.src.split(';')[0].replace('data:', ''); // 处理尺寸和MIME类型信息 }; ``` 4. **火狐浏览器的注意点**:Firefox有时可能会在`load`事件触发前就返回了`dataURL`,这时我们需要确保图片已经完全加载后再进行处理。可以使用`img.complete`属性检查图片是否已加载。 ```javascript if (!img.complete) { img.addEventListener('load', function() { // 图片加载完成后处理 }); } ``` 5. **安全和性能优化**:由于DataURL会把整个图片数据加载到内存中,对于大图片可能会消耗大量资源。可以考虑使用`FileReader`的`readAsArrayBuffer()`方法,配合`Blob.slice()`来分块读取,或者直接上传文件到服务器,让服务器处理图片信息。 总结,实现上传图片获取图片信息的跨浏览器兼容方案,需要结合`FileReader`、`Image`对象以及针对旧版IE的ActiveXObject,同时注意事件触发的时机和浏览器的特性差异。这样,无论用户使用的是IE、Firefox还是其他现代浏览器,我们都能正确地获取和处理图片信息。
- 1
- 习惯的2013-11-07可以很好,可惜不是我需要的
- 粉丝: 135
- 资源: 16
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助