IE下及标准浏览器下的图片旋转(二)—— Canvas(2)

 

   文章过长,一篇无法保存

    IE下及标准浏览器下的图片旋转(二)—— Canvas(1)

 

    同样,作为最后,我们使用使用jquery也为canvas写个旋转demo:

    javascript:

    $(function () {
        var w = $("#pic").width();
        var h = $("#pic").height();
        var rot = 0;
        function turn() {
            if (!$("#cv").length)
            $("#pic").after('<canvas id="cv"></canvas>')
            var rotation = Math.PI * rot / 180;
            if (rot == 90 || rot == 270) {
                $("#cv").attr({"width": h, "height": w});
            }
            else {
                $("#cv").attr({"width": w,"height": h});
            }

            $("#cv").css({
                "position": "absolute",
                "top": "50%",
                "left": "50%",
                "margin-top": function () {return -$(this).height()/2},
                "margin-left": function () {return -$(this).width()/2}
            });

            var canvas = $("#cv")[0].getContext("2d");
            var img = $("#pic")[0];
            canvas.save();

            switch (rot) {
                case 0:
                    canvas.translate(0,0);
                    break;
                case 90:
                    canvas.translate(h,0);
                    break;
                case 180:
                    canvas.translate(w,h);
                    break;
                case 270:
                    canvas.translate(0,w);
                    break;
            }

            canvas.rotate(rotation);
            canvas.drawImage(img, 0, 0, w, h);

            canvas.restore();
            img.style.display = "none";
        }
        $("#turn_r").click(function() {
            rot += 90;
            turn();
            if (rot == 270) {
                rot = -90;
            }
            return false
        });

        $("#turn_l").click(function() {
            rot -= 90;
            if (rot == -90) {
                rot = 270;
            }

            else if (rot == -180) {
                rot = -rot;
            }
            turn();
            return false
        });
    })

 

    css:

    #box {
        width: 280px;
        height: 200px;
        position: relative;
        text-align: center;
        background: #f2f2f2;
    }
    #box a {
        display: inline-block;
        margin: 0 10px;
    }
    #box img {
        position: absolute;
        top: 50%;
        left: 50%;
        margin: -45px 0 0 -60px;
    }

 

    html:

    <div id="box">
        <a href="/" id="turn_l">左转</a>
        <a href="/" id="turn_r">右转</a>
        <img src="12.jpg" id="pic" alt="">
    </div>

 

    效果如图:

 

 

      canvas标签只有现代浏览器支持,IE6-8并不支持,若想在IE6-8中使用,需要引入一个名为excanvas.js的文件。

      excanvas主页:http://excanvas.sourceforge.net/

      excanvas下载:http://code.google.com/p/explorercanvas/downloads/list

      excanvas示例:http://developer.mozilla.org/en/docs/Canvas_tutorial

 

 

    附:旋转角度,中心点,canvas宽高关系:

 

    rotation = Math.PI * rot / 180;

    c = Math.round(Math.cos(rotation) * 1000) / 1000;

    s = Math.round(Math.sin(rotation) * 1000) / 1000;

 

    canvas.height = Math.abs(c*h) + Math.abs(s*w);
    canvas.width = Math.abs(c*w) + Math.abs(s*h);

 

    if (rotation <= Math.PI/2) {
        context.translate(s*h,0);
    } else if (rotation <= Math.PI) {
        context.translate(canvas.width,-c*h);
    } else if (rotation <= 1.5*Math.PI) {
        context.translate(-c*w,canvas.height);
    } else {
        context.translate(0,-s*w);
    }

 

    rotation弧度,rot角度,c,s系数

 

    参考:

    canvas实现图片旋转效果

    图片旋转效果的一些研究、jQuery插件及实例

 

转载于:https://www.cnblogs.com/k13web/p/4139495.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据技术 思维导图

learn from 从0开始学大数据&#xff08;极客时间&#xff09;

python 管理windows客户端_在远程windows客户端上执行python脚本

我正在使用paramiko在远程windows服务器上执行命令。我能够执行dir之类的命令并提取输出&#xff0c;但是执行python脚本似乎失败了。不会引发错误消息。在下面是我的代码片段&#xff1a;def ssh_connect(ip,user,pwd):ssh paramiko.SSHClient()ssh.set_missing_host_key_pol…

日期范围 java_JavaJoDA时间-实现日期范围迭代器

这是一些让你开始的东西。你可能会想一想到底是要包容性还是排他性,等等。import org.joda.time.*;import java.util.*;class LocalDateRange implements Iterable{private final LocalDate start;private final LocalDate end;public LocalDateRange(LocalDate start,LocalDat…

win10win键无反应_台式电脑开机主机没反应怎么办 电脑开机主机没反应解决【详解】...

按了开机按钮后我的台式电脑主机还是没反应&#xff0c;怎么办呢?下面由小编给你做出详细的台式电脑开机主机没反应解方式介绍。(此文主要针对台式电脑做介绍)台式电脑开机主机没反应解方式一&#xff1a;拔掉电源线 然后重复的按开机键5-10下 进行放静电操作 然后再插上电源线…

hadoop 单机伪分布式安装步骤

文章目录1. 安装 Java2. 配置SSH无密码登录3. 下载 hadoop4. 配置环境变量5. 报错处理参考环境 Centos7参考&#xff1a;https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.htmlhttps://blog.csdn.net/bingduanlbd/article/details/5187…

Eclipse 为jar包加入 Java Source和Javadoc(如何向Eclipse中导入源码和doc)

: 当我们在MyEclipse中加入Struct&#xff0c;只是引入了jar包&#xff0c;这时使用jar包里面的类&#xff0c;是无法看到源码的&#xff0c;看到的只是这样 是反编译后的一些东西 加入源码 那么如果看到源码呢&#xff0c;就需要导入了 找到这个类对应的jar包&#xff0c;下载…

ppt生成器_小米发布会ppt词云怎么做的

导语在幻灯片中使用文字云或者文字墙是一件非常酷的事情&#xff0c;之前我们看过的很多发布会PPT都有出现文字云设计。利用文字云工具就告别麻烦的排版&#xff0c;让ppt效果更专业&#xff0c;新颖小米发布会ppt 微词云我们先看下几种文字云案例罗振宇《时间的朋友》跨年演讲…

Java实验方法参数传递与递归_4.3类的结构之二:方法(return,重载,可变个数形参,值传递,递归)...

类的设计中&#xff0c;两个重要结构之二&#xff1a;方法* 方法&#xff1a;描述类应该具有的功能。* 比如&#xff1a;Math类&#xff1a;sqrt()\random()\ ..* Scanner类&#xff1a;nextXxx() ..* Arrays类&#xff1a;sort()\binarySearch()\toString()\equals()\..* * 1.…

钢琴块2电脑版_快陪练教师端电脑版下载_快陪练教师端pc版免费下载[在线教学]...

快陪练教师端电脑版是一款钢琴陪练教师的在线教学软件&#xff0c;快陪练教师端电脑版支持语音互动功能。快陪练教师端电脑版可以帮助老师在线教孩子学习钢琴&#xff0c;软件可以让用户清晰地看到学生弹钢琴时的指法&#xff0c;并及时为其纠正不正确的指法&#xff0c;它引入…

LeetCode 1105. 填充书架(DP)

文章目录1. 题目2. 解题1. 题目 附近的家居城促销&#xff0c;你买回了一直心仪的可调节书架&#xff0c;打算把自己的书都整理到新的书架上。 你把要摆放的书 books 都整理好&#xff0c;叠成一摞&#xff1a;从上往下&#xff0c;第 i 本书的厚度为 books[i][0]&#xff0c…

python字符串前面加上序号_简单了解python字符串前面加r,u的含义

这篇文章主要介绍了简单了解python字符串前面加r,u的含义,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下u/U:表示unicode字符串不是仅仅是针对中文, 可以针对任何的字符串&#xff0c;代表是对字符串进行unicod…

java 不重启部署_一篇文章带你搞定SpringBoot不重启项目实现修改静态资源

一、通过配置文件控制静态资源的热部署在配置文件 application.properties 中添加&#xff1a;#表示从这个默认不触发重启的目录中除去static目录spring.devtools.restart.excludeclasspath:/static/**或者使用&#xff1a;#表示将static目录加入到修改资源会重启的目录中来spr…

判断深度学习模型的稳定性_全自动搭建定制化深度学习模型

EasyDL服务自动化生成与部署EasyDL定制化训练和服务平台基于百度业界领先算法&#xff0c;旨在为用户量身定制业务专属AI模型。通过灵活的配置&#xff0c;用户可以将模型发布为公有云API、设备端离线SDK、本地服务器部署包、软硬一体方案等多种输出方式的AI服务。目前&#xf…

Android应用程序消息处理机制(Looper、Handler)分析

文章转载至CSDN社区罗升阳的安卓之旅&#xff0c;原文地址&#xff1a;http://blog.csdn.net/luoshengyang/article/details/6817933 Android应用程序是通过消息来驱动的&#xff0c;系统为每一个应用程序维护一个消息队例&#xff0c;应用程序的主线程不断地从这个消息 队例中…

冒泡排序和选择排序区别_你以为只是简单的排序?(一)

一直在犹豫要不要写排序的文章&#xff0c;因为真的烂大街了。可是一旦细看&#xff0c;还真是很多值的思考的地方&#xff0c;所以还是选择记录一下以下完整代码&#xff0c;均可从这里获取https://github.com/Rain-Life/data-struct-by-go/tree/master/sort排序算法效率分析了…

java hash 分库分表_分库分表方案

摘自&#xff1a;Java技术栈一、数据库瓶颈不管是IO瓶颈&#xff0c;还是CPU瓶颈&#xff0c;最终都会导致数据库的活跃连接数增加&#xff0c;进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是&#xff0c;可用数据库连接少甚至无连接可用。接下来就可以…

verilog设计简易正弦波信号发生器_信号发生器工作原理是什么

信号发生器是指产生所需参数的电气测试信号的仪器。根据信号波形可分为四类&#xff1a;正弦信号、函数&#xff08;波形&#xff09;信号、脉冲信号和随机信号发生器。那么信号发生器工作原理是什么&#xff1f;听听广州荣鑫电子怎么说。信号发生器又称信号源或振荡器&#xf…

LeetCode 1780. 判断一个数字是否可以表示成三的幂的和(位运算)

文章目录1. 题目2. 解题1. 题目 给你一个整数 n &#xff0c;如果你可以将 n 表示成若干个不同的三的幂之和&#xff0c;请你返回 true &#xff0c;否则请返回 false 。 对于一个整数 y &#xff0c;如果存在整数 x 满足 y3xy 3^xy3x&#xff0c;我们称这个整数 y 是三的幂…

Android “再按一次退出“

1 Override2 public boolean onKeyDown(int keyCode, KeyEvent event) {3 if (keyCode KeyEvent.KEYCODE_BACK) 4 {5 if ((System.currentTimeMillis() - mExitTime) > 2000) { //第一种&#xff1a;判断2次按后退键间隔是否在2秒内6 …

python群控安卓_Github优秀项目推荐,安卓设备免Root实现低延迟投屏和远控

暑假找了个暑假工&#xff0c;没办法人总是要吃饭嘛&#xff0c;Weiney也不例外。亲戚家的小公司想做移动app引流&#xff0c;当然我是完全不懂什么引流&#xff0c;我也就做个打杂的工作。别看我技术一般&#xff0c;在这个不大的公司我还是唯一专业对口的技术人才呢&#xff…