使图片旋转的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 相关文章推荐
Highslide.js是一款基于js实现的网页中图片展示插件
Mar 30 Javascript
brook javascript框架介绍
Oct 10 Javascript
JQuery模板插件 jquery.tmpl 动态ajax扩展
Nov 10 Javascript
jQuery浏览器CSS3特写兼容实例
Jan 19 Javascript
Bootstrap每天必学之进度条
Nov 30 Javascript
第四章之BootStrap表单与图片
Apr 25 Javascript
用原生js统计文本行数的简单示例
Aug 19 Javascript
javaScript和jQuery自动加载简单代码实现方法
Nov 24 jQuery
Vue cli+mui 区域滚动的实例代码
Jan 25 Javascript
解析Vue.js中的组件
Feb 02 Javascript
解决layui laydate 时间控件一闪而过的问题
Sep 28 Javascript
JS简单表单验证功能完整示例
Jan 26 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 无法载入mysql扩展
2010/03/12 PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
2012/06/17 PHP
解析php 版获取重定向后的地址(代码)
2013/06/26 PHP
php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
2015/12/21 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
Laravel5.4框架中视图共享数据的方法详解
2019/09/05 PHP
laravel框架的安装与路由实例分析
2019/10/11 PHP
Javascript中的Split使用方法与技巧
2007/03/09 Javascript
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
IE6下js通过css隐藏select的一个bug
2010/08/16 Javascript
JavaScript面向对象之Prototypes和继承
2012/07/12 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
jQuery超酷平面式时钟效果代码分享
2020/03/30 Javascript
jQuery给元素添加样式的方法详解
2015/12/30 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
实例解析jQuery中如何取消后续执行内容
2016/12/01 Javascript
JQuery异步提交表单与文件上传功能示例
2017/01/12 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
JS获取月的第几周和年的第几周实例代码
2018/12/05 Javascript
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
python3.3使用tkinter开发猜数字游戏示例
2014/03/14 Python
python实现根据主机名字获得所有ip地址的方法
2015/06/28 Python
在python中安装basemap的教程
2018/09/20 Python
wxPython电子表格功能wx.grid实例教程
2019/11/19 Python
Python代码覆盖率统计工具coverage.py用法详解
2020/11/25 Python
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
若通过ObjectOutputStream向一个文件中多次以追加方式写入object,为什么用ObjectInputStream读取这些object时会产生StreamCorruptedException?
2016/10/17 面试题
应聘自荐书
2013/10/08 职场文书
士力架广告词
2014/03/20 职场文书
法定代表人身份证明书(含说明)
2014/10/02 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
2014年材料员工作总结
2014/11/19 职场文书
小学生五一劳动节演讲稿
2015/03/18 职场文书
李白经典诗之一:全文无一“月”字,却句句有月
2019/07/12 职场文书
golang如何去除多余空白字符(含制表符)
2021/04/25 Golang
python中的mysql数据库LIKE操作符详解
2021/07/01 MySQL