上传图片获取图片信息(兼容IE和火狐)
![preview](https://csdnimg.cn/release/downloadcmsfe/public/img/white-bg.ca8570fa.png)
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
![star](https://csdnimg.cn/release/downloadcmsfe/public/img/star.98a08eaa.png)
在开发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还是其他现代浏览器,我们都能正确地获取和处理图片信息。
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![package](https://csdnimg.cn/release/downloadcmsfe/public/img/package.f3fc750b.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/HTML.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
- 1
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
- 习惯的2013-11-07可以很好,可惜不是我需要的
![avatar](https://profile-avatar.csdnimg.cn/7d9ab55fdef54cc8a3ba0f97a383ba74_oodong.jpg!1)
- 粉丝: 135
- 资源: 16
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- chrome 64位 v84 离线安装包 windows安装包
- chrome 64位 v79 离线安装包 windows安装包
- anr_2024-07-03-18-01-59-451
- 214314121525232425252
- VMware虚拟机安装指南:完整步骤详解
- 1111111111111111111111111111111111111111
- 常见算法介绍、算法刷题(含解析与代码)、笔试面试算法题文档
- pg156-ultrascale-pcie-gen3-en-us-4.4
- 2015-2021年地级市月度空气质量数据(AQI、SO2、NO2、PM2.5、PM10、O3、CO)
- CCLINK IE板卡在C#中的运用
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)