使图片旋转的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 相关文章推荐
善用事件代理,警惕闭包的性能陷阱。
Jan 20 Javascript
Fastest way to build an HTML string(拼装html字符串的最快方法)
Aug 20 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
Apr 19 Javascript
javascript对JSON数据排序的3个例子
Apr 12 Javascript
jquery模拟进度条实现方法
Aug 03 Javascript
浅谈Angular的$q, defer, promise
Dec 20 Javascript
Vue 框架之键盘事件、健值修饰符、双向数据绑定
Nov 14 Javascript
JavaScript实现shuffle数组洗牌操作示例
Jan 03 Javascript
vue开发环境配置跨域的方法步骤
Jan 16 Javascript
async/await优雅的错误处理方法总结
Jan 30 Javascript
React+TypeScript+webpack4多入口配置详解
Aug 08 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
Jan 18 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使用websocket示例详解
2014/03/12 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
2015/03/19 PHP
Apache连接PHP后无法启动问题解决思路
2015/06/18 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
2016/12/24 PHP
鼠标图片振动代码
2006/07/06 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
JavaScript中的原型和继承详解(图文)
2014/07/18 Javascript
js电话号码验证方法
2015/09/28 Javascript
学习javascript面向对象 理解javascript原型和原型链
2016/01/04 Javascript
js实现将json数组显示前台table中
2017/01/10 Javascript
Vue2.0利用vue-resource上传文件到七牛的实例代码
2017/07/28 Javascript
10个经典的网页鼠标特效代码
2018/01/09 Javascript
vue-router 源码实现前端路由的两种方式
2018/07/02 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
2019/08/12 Javascript
javascript中innerHTML 获取或替换html内容的实现代码
2020/03/17 Javascript
[48:37]EG vs OG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[51:53]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第二场 1月24日
2021/03/11 DOTA
python如何读写json数据
2018/03/21 Python
numpy.linspace 生成等差数组的方法
2018/07/02 Python
20行python代码实现人脸识别
2019/05/05 Python
使用python搭建服务器并实现Android端与之通信的方法
2019/06/28 Python
Pytorch GPU显存充足却显示out of memory的解决方式
2020/01/13 Python
Python小整数对象池和字符串intern实例解析
2020/03/21 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
2020/09/03 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
Lookfantastic美国/加拿大:英国知名美妆购物网站
2019/03/27 全球购物
大学生通用个人的自我评价
2014/02/10 职场文书
梅花魂教学反思
2014/04/25 职场文书
美化环境标语
2014/06/20 职场文书
营销总监岗位职责
2014/09/16 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
建设工程授权委托书
2014/09/22 职场文书
行政执法作风整顿剖析材料
2014/10/11 职场文书
2014年小学数学工作总结
2014/12/12 职场文书
难以忽视的真相观后感
2015/06/05 职场文书
欢迎新生标语2015
2015/07/16 职场文书