使图片旋转的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 相关文章推荐
js实现点小图看大图效果的思路及示例代码
Oct 28 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
Dec 04 Javascript
Javascript获取CSS伪元素属性的实现代码
Sep 28 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
Oct 28 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
Dec 23 Javascript
Ajax跨域实现代码(后台jsp)
Jan 21 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
Jan 15 Javascript
vue iview实现动态路由和权限验证功能
Apr 17 Javascript
JS数组去重常用方法实例小结【4种方法】
May 28 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
Oct 19 Javascript
js使用swiper实现层叠轮播效果实例代码
Dec 12 Javascript
javascript实现获取中文汉字拼音首字母
May 19 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
广播爱好者需要了解的天线知识
2021/03/01 无线电
ajax php 实现写入数据库
2009/09/02 PHP
php mysql 判断update之后是否更新了的方法
2012/01/10 PHP
PHP静态调用非静态方法的应用分析
2013/05/02 PHP
php基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
php模板引擎技术简单实现
2016/03/15 PHP
php实现数字补零的方法总结
2018/09/12 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
php微信扫码支付 php公众号支付
2019/03/24 PHP
JavaScript入门教程(2) JS基础知识
2009/01/31 Javascript
js判断上传文件的类型和大小示例代码
2013/10/18 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
jquery广告无缝轮播实例
2017/01/05 Javascript
javascript DOM的详解及实例代码
2017/03/06 Javascript
JS组件系列之MVVM组件构建自己的Vue组件
2017/04/28 Javascript
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
2017/10/25 Javascript
parabola.js抛物线与加入购物车效果的示例代码
2017/10/25 Javascript
JS实现在文本指定位置插入内容的简单示例
2017/12/22 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
什么时候不能在 Node.js 中使用 Lock Files
2019/06/24 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
Python中的迭代器漫谈
2015/02/03 Python
python变量的存储原理详解
2019/07/10 Python
python之生成多层json结构的实现
2020/02/27 Python
Python如何定义接口和抽象类
2020/07/28 Python
用OpenCV进行年龄和性别检测的实现示例
2021/01/29 Python
python和opencv构建运动检测器的实现
2021/03/03 Python
HTML5之SVG 2D入门6—视窗坐标系与用户坐标系及变换概述
2013/01/30 HTML / CSS
不开辟用于交换数据的临时空间,如何完成字符串的逆序
2012/12/02 面试题
毕业生动漫设计求职信
2013/10/11 职场文书
大专毕业生自我评价分享
2013/11/10 职场文书
小学假期安全广播稿
2014/09/28 职场文书
民主评议教师党员自我评价
2015/03/04 职场文书
JS实现扫雷项目总结
2021/05/19 Javascript
HTML中的表单元素介绍
2022/02/28 HTML / CSS