使图片旋转的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 相关文章推荐
jQuery 1.3 和 Validation 验证插件1.5.1
Jul 09 Javascript
两个Javascript小tip资料
Nov 23 Javascript
Jquery中给animation加更多的运作效果实例
Sep 05 Javascript
node.js中的http.createServer方法使用说明
Dec 14 Javascript
jQuery插件StickUp实现网页导航置顶
Apr 12 Javascript
深入解析JavaScript中函数的Currying柯里化
Mar 19 Javascript
angularjs 获取默认选中的单选按钮的value方法
Feb 28 Javascript
基于JS开发微信网页录音功能的实例代码
Apr 30 Javascript
详解VSCode配置启动Vue项目
May 14 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
Jun 11 Javascript
使用ThinkJs搭建微信中控服务的实现方法
Aug 08 Javascript
layui实现鼠标移动到单元格上显示数据的方法
Sep 11 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
BBS(php & mysql)完整版(三)
2006/10/09 PHP
基于OpenCV的PHP图像人脸识别技术
2009/10/11 PHP
初次接触php抽象工厂模式(Elgg)
2010/03/21 PHP
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
2011/06/27 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
2013/12/19 Javascript
JavaScript调试技巧之console.log()详解
2014/03/19 Javascript
jQuery学习笔记之创建DOM元素
2015/01/19 Javascript
js初始化验证实例详解
2016/11/26 Javascript
jQuery表单插件ajaxForm实例详解
2017/01/17 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
layui框架中layer父子页面交互的方法分析
2017/11/15 Javascript
vue-router启用history模式下的开发及非根目录部署方法
2018/12/23 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
JS实现滚动条触底加载更多
2019/09/19 Javascript
p5.js实现简单货车运动动画
2019/10/23 Javascript
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
在Django的模型中执行原始SQL查询的方法
2015/07/21 Python
python编程开发之textwrap文本样式处理技巧
2015/11/13 Python
Python使用plotly绘制数据图表的方法
2017/07/18 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
python pandas 如何替换某列的一个值
2018/06/09 Python
Django Admin实现三级联动的示例代码(省市区)
2018/06/22 Python
iPython pylab模式启动方式
2020/04/24 Python
利用Vscode进行Python开发环境配置的步骤
2020/06/22 Python
利用CSS3实现单选框动画特效示例代码
2016/09/26 HTML / CSS
Lovedrobe官网:英国领先的大码服装品牌
2019/09/19 全球购物
介绍一下SQL中union,intersect和minus
2012/04/05 面试题
大学生咖啡店创业计划书
2014/01/21 职场文书
农林环境专业求职信
2014/03/13 职场文书
学习经验交流会主持词
2014/04/01 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
补充协议书
2015/01/28 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
原生JS封装vue Tab切换效果
2021/04/28 Vue.js
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python