使图片旋转的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 相关文章推荐
Javascript valueOf 使用方法
Dec 28 Javascript
jquery实现的网页自动播放声音
Apr 30 Javascript
JavaScript怎么判断图片是否加载完成以便获取其尺寸
May 08 Javascript
javascript制作的网页侧边弹出框思路及实现代码
May 21 Javascript
JavaScript中双向数据绑定详解
May 03 Javascript
jQuery简单绑定单个事件的方法示例
Jun 10 jQuery
Vue组件化开发思考
Feb 02 Javascript
微信打开网址添加在浏览器中打开提示的办法
May 20 Javascript
vue将后台数据时间戳转换成日期格式
Jul 31 Javascript
解决vue+webpack项目接口跨域出现的问题
Aug 10 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
Oct 28 Javascript
React Hook用法示例详解(6个常见hook)
Apr 28 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注册和登录界面的实现案例(推荐)
2016/10/24 PHP
Javascript在IE和FireFox中的不同表现简析
2012/12/03 Javascript
手机Web APP如何实现分享多平台功能
2016/08/19 Javascript
使用node.js对音视频文件加密的实例代码
2017/08/30 Javascript
vue-cli webpack 引入jquery的方法
2018/01/10 jQuery
Parcel 打包示例(React HelloWorld)
2018/01/16 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
2018/08/07 Javascript
Vue中保存数据到磁盘文件的方法
2018/09/06 Javascript
vue+iview 实现可编辑表格的示例代码
2018/10/31 Javascript
通过实例解析jQ Ajax操作相关原理
2020/09/23 Javascript
Python基于pygame实现图片代替鼠标移动效果
2015/11/11 Python
Python通过属性手段实现只允许调用一次的示例讲解
2018/04/21 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
python输入多行字符串的方法总结
2019/07/02 Python
python线程中的同步问题及解决方法
2019/08/29 Python
python rsa实现数据加密和解密、签名加密和验签功能
2019/09/18 Python
python3 实现函数写文件路径的正确方法
2019/11/27 Python
python实时监控logstash日志代码
2020/04/27 Python
使用Python实现将多表分批次从数据库导出到Excel
2020/05/15 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
Python3与fastdfs分布式文件系统如何实现交互
2020/06/23 Python
pandas参数设置的实用小技巧
2020/08/23 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
让IE支持CSS3的不完全兼容方案
2014/09/19 HTML / CSS
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
英国最大的香水商店:The Fragrance Shop
2018/07/06 全球购物
allbeauty美国:英国在线美容店
2019/03/11 全球购物
YBF Beauty官网:美丽挚友,美国知名彩妆品牌
2020/11/22 全球购物
《记承天寺夜游》教学反思
2014/02/16 职场文书
决心书范文
2014/03/11 职场文书
《去年的树》教学反思
2014/04/11 职场文书
五月的鲜花活动方案
2014/08/21 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
承诺书模板大全
2015/05/04 职场文书
2015年财务科工作总结范文
2015/05/13 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书