使图片旋转的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 获取链接(url)参数的方法[正则与截取字符串]
Feb 09 Javascript
编写可维护面向对象的JavaScript代码[翻译]
Feb 12 Javascript
jQuery添加和删除输入文本框标签代码
May 20 Javascript
jQuery中Datatables增加跳转到指定页功能
Feb 08 Javascript
JS实现的简单拖拽功能示例
Mar 13 Javascript
Easyui ueditor 整合解决不能编辑的问题(推荐)
Jun 25 Javascript
jQuery实现拼图小游戏(实例讲解)
Jul 24 jQuery
JavaScript判断输入是否为数字类型的方法总结
Sep 28 Javascript
React Native验证码倒计时工具类分享
Oct 24 Javascript
Node.js使用cookie保持登录的方法
May 11 Javascript
微信小程序之裁剪图片成圆形的实现代码
Oct 11 Javascript
VuePress 静态网站生成方法步骤
Feb 14 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 Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
五款常用mysql slow log分析工具的比较分析
2011/05/22 PHP
php使用memcoder将视频转成mp4格式的方法
2015/03/12 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
2016/09/23 PHP
PHP面向对象类型约束用法分析
2019/06/12 PHP
Laravel 不同生产环境服务器的判断实践
2019/10/15 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
2020/05/27 PHP
用javascript来实现动画导航效果的代码
2007/12/16 Javascript
js 替换功能函数,用正则表达式解决,js的全部替换
2010/12/08 Javascript
jQuery对象数据缓存Cache原理及jQuery.data方法区别介绍
2013/04/07 Javascript
JavaScript实现动态删除列表框值的方法
2015/08/12 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
跨域请求的完美解决方法(JSONP, CORS)
2016/06/12 Javascript
JS代码实现百度地图 画圆 删除标注
2016/10/12 Javascript
Vue 固定头 固定列 点击表头可排序的表格组件
2016/11/25 Javascript
Bootstrap免费字体和图标网站(值得收藏)
2017/03/16 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
常见的浏览器Hack技巧整理
2017/06/29 Javascript
Vue中使用 setTimeout() setInterval()函数的问题
2018/09/13 Javascript
vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法
2018/10/22 Javascript
基于Vue实现图片在指定区域内移动的思路详解
2018/11/11 Javascript
JavaScript实现手机号码 3-4-4格式并控制新增和删除时光标的位置
2020/06/02 Javascript
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
[02:05:03]完美世界DOTA2联赛循环赛 LBZS VS Matador BO2 10.28
2020/10/28 DOTA
几种实用的pythonic语法实例代码
2018/02/24 Python
python基于TCP实现的文件下载器功能案例
2019/12/10 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
2020/06/01 Python
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
党校学习自我鉴定
2014/02/24 职场文书
保险专业求职信
2014/07/07 职场文书
合作经营协议书范本
2014/09/16 职场文书
抗洪救灾标语
2014/10/08 职场文书
《女娲补天》教学反思
2016/02/20 职场文书
浅析InnoDB索引结构
2021/04/05 MySQL
分享3个非常实用的 Python 模块
2022/03/03 Python