使图片旋转的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 Event事件学习第一章 Event介绍
Feb 07 Javascript
获得所有表单值的JQuery实现代码[IE暂不支持]
May 24 Javascript
jQuery滚动加载图片效果的实现
Mar 06 Javascript
JS修改css样式style浅谈
May 06 Javascript
js获取当前路径的简单示例代码
Jan 08 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
Dec 26 Javascript
jquery实现在光标位置插入内容的方法
Feb 05 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
Jun 25 Javascript
JS模拟Dialog弹出浮动框效果代码
Oct 16 Javascript
js实现坦克移动小游戏
Oct 28 Javascript
使用vue-cli3+typescript的项目模板创建工程的教程
Feb 28 Javascript
Vue项目打包压缩的实现(让页面更快响应)
Mar 10 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
header()函数使用说明
2006/11/23 PHP
解决PHP里大量数据循环时内存耗尽的方法
2015/10/10 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
2016/02/26 PHP
老生常谈PHP面向对象之标识映射
2017/06/21 PHP
php表单处理操作
2017/11/16 PHP
PHP常用日期加减计算方法实例小结
2018/07/31 PHP
PHP chop()函数讲解
2019/02/11 PHP
Laravel 之url参数,获取路由参数的例子
2019/10/21 PHP
laravel数据库查询结果自动转数组修改实例
2021/02/27 PHP
JQuery与JSon实现的无刷新分页代码
2011/09/13 Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
2012/12/19 Javascript
Jquery异步提交表单代码分享
2015/03/26 Javascript
Node.js静态文件服务器改进版
2016/01/10 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
在vscode中统一vue编码风格的方法
2018/02/22 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
2018/10/25 Javascript
判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号
2019/04/28 Javascript
Vue实现图片轮播组件思路及实例解析
2020/05/11 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
2020/12/26 Vue.js
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
Python: 传递列表副本方式
2019/12/19 Python
Python 音频生成器的实现示例
2019/12/24 Python
使用python创建生成动态链接库dll的方法
2020/05/09 Python
python3判断IP地址的方法
2021/03/04 Python
美国在线鲜花速递:ProFlowers
2017/01/05 全球购物
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
七一表彰活动方案
2014/01/18 职场文书
十八届三中全会个人学习材料
2014/02/13 职场文书
求职自我推荐信
2014/06/25 职场文书
学校与家长安全责任书
2014/07/23 职场文书
殡葬服务心得体会
2014/09/11 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
2015年办公室工作总结范文
2015/03/31 职场文书
2015小学新教师个人工作总结
2015/10/14 职场文书
励志语录:时光飞逝,请学会珍惜所有的人和事
2020/01/16 职场文书
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
2022/04/20 MySQL