js图片旋转
<script type="text/javascript" language="javascript">
function rotate(id, angle, whence) {
var p = document.getElementById(id);
if (!whence) {
p.angle = ((p.angle == undefined ? 0 : p.angle) + angle) % 360;
}
else {
p.angle = angle;
}
if (p.angle >= 0) {
var rotation = Math.PI * p.angle / 180;
}
else {
var rotation = Math.PI * (360 + p.angle) / 180;
}
var costheta = Math.cos(rotation);
var sintheta = Math.sin(rotation);
if (document.all && !window.opera) {
var canvas = document.createElement('img');
canvas.src = p.src;
canvas.height = p.height;
canvas.width = p.width;
canvas.style.filter = "progid:DXImageTransform.Microsoft.Matrix(M11=" + costheta + ",M12=" + (-sintheta) + ",M21=" + sintheta + ",M22=" + costheta + ",SizingMethod='auto expand')";
}
else {
var canvas = document.createElement('canvas');
if (!p.oImage) {
canvas.oImage = new Image();
canvas.oImage.src = p.src;
}
else {
canvas.oImage = p.oImage;
}
//alert(canvas.width)
canvas.style.width = canvas.width = Math.abs(costheta * canvas.oImage.width) + Math.abs(sintheta * canvas.oImage.height);
canvas.style.height = canvas.height = Math.abs(costheta * canvas.oImage.height) + Math.abs(sintheta * canvas.oImage.width);
var context = canvas.getContext('2d');
context.save();
if (rotation <= Math.PI / 2) {
context.translate(sintheta * canvas.oImage.height, 0);
}
else if (rotation <= Math.PI) {
context.translate(canvas.width, -costheta * canvas.oImage.height);
}
else if (rotation <= 1.5 * Math.PI) {
context.translate(-costheta * canvas.oImage.width, canvas.height);
}
else {
context.translate(0, -sintheta * canvas.oImage.width);
}
context.rotate(rotation);
context.drawImage(canvas.oImage, 0, 0, canvas.oImage.width, canvas.oImage.height);
context.restore();
}
canvas.id = p.id;
canvas.angle = p.angle;
p.parentNode.replaceChild(canvas, p);
} //向右旋转
function rotateRight(id, angle) {
rotate(id, angle == undefined ? 90 : angle);
}
//向左旋转
function rotateLeft(id, angle) {
rotate(id, angle == undefined ? -90 : -angle);
}
</script>
调用方法:
<div class="content">
<div class="data">
<a href="javascript:void(0)" style="font-weight: bold; text-decoration: none; font-size: 16px;"
onclick="rotateRight('theimage',90);">右转</a>
<a href="javascript:void(0)" style="font-weight: bold; font-size: 16px; text-decoration: none;"
onclick="rotateLeft('theimage',90);">左转</a><br>
<img src="a.jpg" id="theimage" onload="resizeimg(this,this.width,this.height)" width="100%" alt="800×1422" style="cursor: pointer;" />
</a>
<div style="clear: both">
</div>
</div>
</div>
js图片旋转的更多相关文章
- JS框架_(coolShow.js)图片旋转动画特效
百度云盘 传送门 密码:ble6 coolShow.js插件图片旋转动画效果 <!DOCTYPE HTML> <head> <meta http-equiv=" ...
- js无刷新上传图片,服务端有生成缩略图,剪切图片,iphone图片旋转判断功能
html: <form action="<{:AppLink('circle/uploadimg')}>" id="imageform" me ...
- 图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活
图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活 图片旋转+剪裁js插件(兼容各浏览器) by zhangxinxu from http://www.zhangxinxu.com 本 ...
- js实现图片旋转、模板文件查看图片大图之记录篇[二]
一个小小的前端需求送给大家,使用js实现图片旋转,并且点击图片能够实现规定格式的大图. 主要使用的是jQuery的delegate()方法实现图片旋转,该方法主要的功能就是给某个组件绑定一个或一组事件 ...
- JS实现图片base64转blob对象,压缩图片,预览图片,图片旋转到正确角度
base64转blob对象 /** 将base64转换为文件对象 * @param {String} base64 base64字符串 * */ var convertBase64ToBlob = f ...
- js实现图片旋转
1.以下代码适用ie9版本 js代码如下: function rotate(o,p){ var img = document.getElementById(o); if(!img || !p) ret ...
- 【js】js 让图片旋转
转http://www.cnblogs.com/ustcyc/p/3760116.html 核心: canvas.style.filter = "progid:DXImageTransfo ...
- jQuery图片旋转展示收缩效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 一款实用的viewer.js 图片相册
Viewer.js 是一款强大的图片相册插件,像SNS交友网站一般都会用到点击缩略图,弹出层大图片,而且弹出层有多个控制按钮,比如放大缩小.旋转.撤回等,底部有缩略图列表可切换. 支持移动设备触摸事件 ...
随机推荐
- C# 匿名方法及Lambda表达式
1.匿名方法 定义:匿名方法不能直接在类中定义,而是在给委托变量赋值的时候,需要赋值一个方法,此时可以“现做现卖”,定义一个匿名方法传递给该委托. 举实例说明: 实例一:无参数,无返回值的一个匿名方法 ...
- 删除HT和CAS角色与扩展在另一台服务器
背景:原先使用三合一方式部署的架构,如今不再满足企业需求,因此需要将原来的一台服务器多角色的拆分开,即由原来CAS.HT.MBX角色集一台服务器的分成两台服务器来部署,此架构为MBX角色单独部署在 ...
- 理解C#系列 / 核心C# / 数据类型
数据类型 数据类型 C#把数据类型分为两种:值类型和引用类型. 值类型和引用类型 值类型的变量直接指向存储的值,引用类型的变量指向值的引用.[理解:引用就像一个柜子的号码牌,可以顺藤摸瓜找到柜子.假如 ...
- 《JavaScript高级程序设计》心得笔记-----第一篇章
第一章 JavaScript由ECMAScript.DOM.BOM组成.其中BOM功能在HTML5中有了正式的规范,使BOM的兼容性越来越高. 第二章 1.<script>属性中的asyn ...
- FTP协议及工作原理详解
1. FTP协议 什么是FTP呢?FTP 是 TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写. 该协议是Internet文件传送的基础,它由一系列规格说明文 ...
- OpenGL 回顾-——矩形的创建、列表
在使用四点创建矩形时,必须按照顺序,顺时针或者逆时针,不然会错乱.感觉是根据点的顺序依次连线. glBegin(GL_QUADS); glColor3f(1.0,0.0,0.0); glVertex3 ...
- Linux I/O模型
同步阻塞I/O 在此种方式下,用户进程在发起一个I/O操作以后,必须等待I/O操作的完成,只有当真正完成了I/O操作以后,用户进程才能运行.Java传统的I/O模型属于此种方式. 同步非阻塞I/O 在 ...
- .NET中变量的类型问题
1.JAVA和C# Byte的不同. java里一个byte取值范围是-128~127, 而C#里一个byte是0~255. 首位不同. 但是底层I/O存储的数据是一样的, 比如, 十进制的100, ...
- NDK 通过java调用so文件
首先我们来看so文件的来源 1. 自己写.c文件,然后生成so库 2. 引用别人的静态库,或者动态库来生成新的jni调用库. 我们先来看最简单的编写一个jni调用的so库,包含一个获取字符串的方法,通 ...
- ADO.NET笔记——将DataReader作为函数返回值
相关知识: 在很多情况下,可能把数据库的访问封装到一个函数中,通过该函数返回一个DataReader对象给调用者.例如定义函数:SqlDataReader returnDR(),然后再Main函数中调 ...