使图片旋转的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中变量相关的细节分析
Aug 13 Javascript
javascript跑马灯悬停放大效果实现代码
Dec 12 Javascript
js操作iframe父子窗体示例
May 22 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
Dec 08 Javascript
利用select实现年月日三级联动的日期选择效果【推荐】
Dec 13 Javascript
bootstrap表格分页实例讲解
Dec 30 Javascript
jQuery监听浏览器窗口大小的变化实例
Feb 07 Javascript
vue的状态管理模式vuex
Nov 30 Javascript
vue中本地静态图片路径写法
Mar 06 Javascript
node实现分片下载的示例代码
Oct 17 Javascript
在移动端使用vue-router和keep-alive的方法示例
Dec 02 Javascript
vue开发chrome插件,实现获取界面数据和保存到数据库功能
Dec 01 Vue.js
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微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
thinkphp中U方法按路由规则生成url的方法
2018/03/12 PHP
IE本地存储userdata的一个bug说明
2010/07/01 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
2014/05/28 Javascript
抛弃Nginx使用nodejs做反向代理服务器
2014/07/17 NodeJs
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
嵌入式iframe子页面与父页面js通信的方法
2015/01/20 Javascript
javascript十六进制及二进制转化的方法
2015/05/06 Javascript
实例代码详解jquery.slides.js
2015/11/16 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
[js高手之路]原型式继承与寄生式继承详解
2017/08/28 Javascript
详解Vuex中mapState的具体用法
2017/09/28 Javascript
jQuery中将json数据显示到页面表格的方法
2018/05/27 jQuery
Vue+webpack+Element 兼容问题总结(小结)
2018/08/16 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
JavaScript禁用右键单击优缺点分析
2019/01/20 Javascript
JavaScript数组排序功能简单实现
2020/05/14 Javascript
Python ValueError: invalid literal for int() with base 10 实用解决方法
2015/06/21 Python
Python中对象的引用与复制代码示例
2017/12/04 Python
基于Django contrib Comments 评论模块(详解)
2017/12/08 Python
python使用rsa非对称加密过程解析
2019/12/28 Python
python文件处理fileinput使用方法详解
2020/01/02 Python
python两种注释用法的示例
2020/10/09 Python
jupyter notebook指定启动目录的方法
2021/03/02 Python
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
最新英语专业学生求职信范文
2013/09/21 职场文书
中医专业应届生求职信
2013/11/17 职场文书
高级编程求职信模板
2014/02/16 职场文书
硕士研究生求职自荐信范文
2014/03/11 职场文书
工作岗位说明书模板
2014/05/09 职场文书
音乐节策划方案
2014/06/09 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
k8s部署redis cluster集群的实现
2021/06/24 Redis