使图片旋转的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温习的一些笔记 基础常用知识小结
Jun 22 Javascript
自己做的模拟模态对话框实现代码
May 23 Javascript
JS中Iframe之间传值的方法
Mar 11 Javascript
javascript中全局对象的parseInt()方法使用介绍
Dec 19 Javascript
js实现在同一窗口浏览图片
Sep 17 Javascript
浅谈JavaScript Array对象
Dec 29 Javascript
JavaScript中的Math.sin()方法使用详解
Jun 15 Javascript
JS给swf传参数的实现方法
Sep 13 Javascript
jQuery中DOM节点删除之empty与remove
Jan 20 Javascript
基于 webpack2 实现的多入口项目脚手架详解
Jun 26 Javascript
JavaScript实现鼠标滚轮控制页面图片切换功能示例
Oct 14 Javascript
关于vue组件事件属性穿透详解
Oct 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
phplock(php进程锁) v1.0 beta1
2009/11/24 PHP
php 中的4种标记风格介绍
2012/05/10 PHP
用php随机生成福彩双色球号码的2种方法
2013/02/04 PHP
提升PHP性能的21种方法介绍
2013/06/25 PHP
yii添删改查实例
2015/11/16 PHP
使用Zookeeper分布式部署PHP应用程序
2019/03/15 PHP
php面向对象重点知识分享
2019/09/27 PHP
JAVASCRIPT下判断IE与FF的比较简单的方式
2008/10/17 Javascript
最短的javascript:地址栏载入脚本代码
2011/10/13 Javascript
jQuery EasyUI API 中文文档 - Spinner微调器使用
2011/10/21 Javascript
40个有创意的jQuery图片、内容滑动及弹出插件收藏集之一
2011/12/31 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
用JS写的一个Ajax库(实例代码)
2016/08/06 Javascript
js实现添加可信站点、修改activex安全设置,禁用弹出窗口阻止程序
2016/08/17 Javascript
Vue.js实现价格计算器功能
2020/03/30 Javascript
详解bootstrap用dropdown-menu实现上下文菜单
2017/09/22 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
js实现简单掷骰子小游戏
2019/10/24 Javascript
详解Vue3.0 + TypeScript + Vite初体验
2021/02/22 Vue.js
[42:25]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第三场
2018/04/06 DOTA
Python黑帽编程 3.4 跨越VLAN详解
2016/09/28 Python
Django开发中复选框用法示例
2018/03/20 Python
Python动态生成多维数组的方法示例
2018/08/09 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
2018/12/24 Python
python的scipy实现插值的示例代码
2019/11/12 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
用python批量移动文件
2021/01/14 Python
美丽的现代设计家具:2Modern
2018/07/26 全球购物
德国受欢迎的旅游和休闲网站:lastminute.de
2019/09/23 全球购物
网络技术支持面试题
2013/04/22 面试题
2014年健康教育实施方案
2014/02/17 职场文书
项目采购员岗位职责
2014/04/15 职场文书
家长意见书
2015/06/04 职场文书
小学教育见习总结
2015/06/23 职场文书
Python 正则模块详情
2021/11/02 Python
教你win10系统中APPCRASH事件问题解决方法
2022/07/15 数码科技