使图片旋转的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 相关文章推荐
关于IFRAME 自适应高度的研究
Jul 20 Javascript
基于JQuery的一句代码实现表格的简单筛选
Jul 26 Javascript
兼容IE与firefox火狐的回车事件(js与jquery)
Oct 20 Javascript
基于jquery的放大镜效果
May 30 Javascript
javaScript如何生成xmlhttp
Dec 16 Javascript
JS判断、校验MAC地址的2个实例
May 05 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
Dec 17 Javascript
基于bootstrap插件实现autocomplete自动完成表单
May 07 Javascript
针对JavaScript中this指向的简单理解
Aug 26 Javascript
jQuery实现的网页换肤效果示例
Sep 20 Javascript
基于模板引擎Jade的应用(详解)
Dec 12 Javascript
Angular4编程之表单响应功能示例
Dec 13 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文件读写操作之文件读取方法详解
2011/01/13 PHP
PHP中使用addslashes函数转义的安全性原理分析
2014/11/03 PHP
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
基于thinkPHP实现的微信自定义分享功能示例
2016/09/23 PHP
PHP连接MySQL数据库操作代码实例解析
2020/07/11 PHP
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
jquery 实现表单验证功能代码(简洁)
2012/07/03 Javascript
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
jquery text()方法取标签中的文本
2014/07/25 Javascript
浅谈jQuery绑定事件会叠加的解决方法和心得总结
2016/10/26 Javascript
基于对象合并功能的实现示例
2017/10/10 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
vue的滚动条插件实现代码
2019/09/07 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
python检测是文件还是目录的方法
2015/07/03 Python
Python编程求质数实例代码
2018/01/31 Python
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
python如何生成网页验证码
2018/07/28 Python
python学习之hook钩子的原理和使用
2018/10/25 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
djano一对一、多对多、分页实例代码
2019/08/16 Python
python实现统计代码行数的小工具
2019/09/19 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
美国女鞋品牌:naturalizer(娜然)
2016/08/01 全球购物
阿根廷票务网站:StubHub阿根廷
2018/04/13 全球购物
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
智能室内花园:Click & Grow
2021/01/29 全球购物
硕士研究生个人求职信
2013/12/04 职场文书
护士毕业生自我鉴定
2014/02/08 职场文书
《两只鸟蛋》教学反思
2014/02/10 职场文书
后勤服务中心总经理工作职责
2014/03/03 职场文书
小学教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
项目备案申请报告
2015/05/15 职场文书
经典格言警句:没有热忱,世间便无进步
2019/11/13 职场文书
Java并发编程必备之Future机制
2021/06/30 Java/Android
Python爬虫网络请求之代理服务器和动态Cookies
2022/04/12 Python