使图片旋转的3种解决方案


Posted in Javascript onNovember 21, 2013

图片旋转效果的研究
最近在项目中需要做图片的旋转功能,我研究了一下。下面来总结下图片旋转在各个浏览器的支持情况

一、图片旋转的方案

1)css3实现图片旋转功能:支持的浏览器有chrome,firefox;opera是不支持的。

具体代码为:-moz-transfrom:rotate(90deg);-webkit-ransfrom:rotate(90deg);
上述代码的意思就是将图片顺时针旋转90度,其实可以旋转任意的度数。但是支持css3的浏览器只有chrome,firefox3.6 ,safari,ie浏览器是不支持的。那么IE
下该怎么处理呢?于是就有了下面的一种方案

2)在IE下通过滤镜来实现旋转

具体代码为:filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
这里的rotation 参数可以为0,1,2,3 ,表示的意思就是这些数字乘以90后的旋转角度。IE下如果要旋转任意的角度要用到矩阵变换滤镜,我们在日常的使用过程中,
大部分使用的是变换90的倍数,这里就不讨论任意的角度了。但是还是有问题的,如果非ie浏览器,不支持CSS3,那么如果实现图片的旋转呢,其实canvas也是可以图片旋转的。

3)用canvas来实现图片的旋转

canvas在chrome,firefox,opera等浏览器中均支持,他是有一个基于 JavaScript 的绘图 API,。首先我们来看看怎样利用canvas+JavaScript实现图片的旋转

代码如下:

var test = function(){
        var canvas = document.getElementById("result");
        var oImg = document.getElementById("Img");        
        canvas.height = 300;
        canvas.width = 200;
        var context = canvas.getContext("2d");
        context.save();
        context.translate(200,0);
        context.rotate(Math.PI/3);
        context.drawImage(oImg, 0, 0, 300, 200);
        context.restore();
        oImg.style.display = "none";
};

上述代码首先得到一个canvas对象,然后设置他的高度,开始绘图了。这个改变canvas的中心点和旋转角度,然后将图片画到canvas中去,将其存储起来,然后
隐藏之前的图片。这种方法实现还是比较平滑的。

二、各种方案的对比

css3的实现方案,不会改变原始图片所占空间的大小的,但是ie下的滤镜会改变图片所占空间的大小。
其实ie下也是可以支持canvas的,只需要引用一个canvas的脚本。这个是有google提供的一个。但是这个脚本有点大,没有压缩前有20多k
我比较建议在ie下使用滤镜来实现,其他的浏览器使用canvas 标签来实现。

Javascript 相关文章推荐
prototype1.4中文手册
Sep 22 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
Jul 03 Javascript
JavaScript与DOM组合动态创建表格实例
Dec 23 Javascript
jquery实现checkbox全选全不选的简单实例
Dec 31 Javascript
Eclipse去除js(JavaScript)验证错误
Feb 11 Javascript
深入探寻javascript定时器
Jan 02 Javascript
禁止按回车键提交表单的方法
Jun 11 Javascript
Vue.js实战之使用Vuex + axios发送请求详解
Apr 04 Javascript
React进阶学习之组件的解耦之道
Aug 07 Javascript
Vue2.0 http请求以及loading展示实例
Mar 06 Javascript
spring+angular实现导出excel的实现代码
Feb 27 Javascript
JS判断数组四种实现方法详解
Jun 29 Javascript
js单例模式详解实例
Nov 21 #Javascript
Ajax同步与异步传输的示例代码
Nov 21 #Javascript
jquery与prototype框架的详细对比
Nov 21 #Javascript
Tab切换组件(选项卡功能)实例代码
Nov 21 #Javascript
JS仿百度搜索自动提示框匹配查询功能
Nov 21 #Javascript
探讨javascript是不是面向对象的语言
Nov 21 #Javascript
JS中把字符转成ASCII值的函数示例代码
Nov 21 #Javascript
You might like
php下将图片以二进制存入mysql数据库中并显示的实现代码
2010/05/27 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
Javascript-Mozilla和IE中的一个函数直接量的问题分析
2007/08/12 Javascript
jQuery 使用手册(七)
2009/09/23 Javascript
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
js 中 document.createEvent的用法
2010/08/29 Javascript
JS俄罗斯方块,包含完整的设计理念
2010/12/11 Javascript
详谈 Jquery Ajax异步处理Json数据.
2011/09/09 Javascript
JS判断客服QQ号在线还是离线状态的方法
2015/01/13 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
2015/03/24 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
复杂的javascript窗口分帧解析
2016/02/19 Javascript
Centos7 中安装 Node.js v4.4.4
2016/11/03 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
2017/04/16 Javascript
送你43道JS面试题(收藏)
2019/06/17 Javascript
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
c++生成dll使用python调用dll的方法
2014/01/20 Python
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
Python随机生成彩票号码的方法
2015/03/05 Python
python类装饰器用法实例
2015/06/04 Python
python模拟点击网页按钮实现方法
2020/02/25 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
市场安全管理制度
2014/01/26 职场文书
大学信息公开实施方案
2014/03/09 职场文书
5.12护士节演讲稿
2014/04/30 职场文书
见习报告的格式
2014/11/04 职场文书
体育教师个人工作总结
2015/02/09 职场文书
门店店长岗位职责
2015/04/14 职场文书
校园歌手大赛主持词
2015/07/03 职场文书
找规律教学反思
2016/02/23 职场文书
JavaScript实现班级抽签小程序
2021/05/19 Javascript
详解Laravel制作API接口
2021/05/31 PHP
如何打开Win11系统注册表编辑器?Win11注册表编辑器打开修复方法
2022/04/05 数码科技