canvas实现图片镜像翻转的2种方式


Posted in HTML / CSS onJuly 22, 2020

1. 通过canvas自带的画布方法进行翻转

var img = new Image(); //这个就是 img标签的dom对象
  img.src = './sy.png';
  img.onload = function () {
    //图片加载完成后,执行此方法
    ctx.drawImage(img, posx, posy, 210, 80);
  };
play.addEventListener('click', function () {
     ctx.clearRect(0, 0, canvas.width, canvas.height);//清除画布
     //位移来做镜像翻转
     ctx.translate(210+ posx * 2, 0);
     ctx.scale(-1, 1); //左右镜像翻转
     
     //ctx.translate(0, 160 + posy * 2);
     //ctx.scale(1, -1); //上下镜像翻转
     ctx.drawImage(img, 0, 0, 210, 80);
  });

2.像素点的镜像翻转方法

//竖向像素反转
    function imageDataVRevert(sourceData, newData) {
      for (var i = 0, h = sourceData.height; i < h; i++) {
        for (var j = 0, w = sourceData.width; j < w; j++) {
          newData.data[i * w * 4 + j * 4 + 0] =
            sourceData.data[(h - i) * w * 4 + j * 4 + 0];
          newData.data[i * w * 4 + j * 4 + 1] =
            sourceData.data[(h - i) * w * 4 + j * 4 + 1];
          newData.data[i * w * 4 + j * 4 + 2] =
            sourceData.data[(h - i) * w * 4 + j * 4 + 2];
          newData.data[i * w * 4 + j * 4 + 3] =
            sourceData.data[(h - i) * w * 4 + j * 4 + 3];
        }
      }
      return newData;
    }
//横向像素反转
    function imageDataHRevert(sourceData, newData) {
      for (var i = 0, h = sourceData.height; i < h; i++) {
        for (j = 0, w = sourceData.width; j < w; j++) {
          newData.data[i * w * 4 + j * 4 + 0] =
            sourceData.data[i * w * 4 + (w - j) * 4 + 0];
          newData.data[i * w * 4 + j * 4 + 1] =
            sourceData.data[i * w * 4 + (w - j) * 4 + 1];
          newData.data[i * w * 4 + j * 4 + 2] =
            sourceData.data[i * w * 4 + (w - j) * 4 + 2];
          newData.data[i * w * 4 + j * 4 + 3] =
            sourceData.data[i * w * 4 + (w - j) * 4 + 3];
        }
      }
      return newData;
    }
``

var img = new Image(); //这个就是 img标签的dom对象
  img.src = './sy.png';
  img.onload = function () {
    //图片加载完成后,执行此方法
    ctx.drawImage(img, 0, 0, 210, 80);
  };
  
    //像素点操作
    var imgData = ctx.getImageData(0, 0, 210, 80);
    var newImgData = ctx.getImageData(0, 0, 210, 80);

    // var newImgData = ctx.getImageData(0, 0, w, h);
    ctx.putImageData(imageDataVRevert(newImgData, imgData), 0, 0);  //上下翻转
    // ctx.putImageData(imageDataHRevert(newImgData, imgData), 0, 0);//左右翻转~~~~

到此这篇关于canvas实现图片镜像翻转的2种方式的文章就介绍到这了,更多相关canvas图片镜像翻转内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木! 

HTML / CSS 相关文章推荐
使用before和:after伪类制作css3圆形按钮
Apr 08 HTML / CSS
css3中transition属性详解
Sep 02 HTML / CSS
CSS3实现的炫酷菜单代码分享
Mar 12 HTML / CSS
CSS3圆角和渐变2种常用功能详解
Jan 06 HTML / CSS
使用CSS3实现SVG路径描边动画效果入门教程
Oct 21 HTML / CSS
详解HTML5中的标签
Jun 19 HTML / CSS
利用纯html5绘制出来的一款非常漂亮的时钟
Jan 04 HTML / CSS
iframe跨域的几种常用方法
Nov 11 HTML / CSS
详解HTML5 Canvas标签及基本使用
Jan 10 HTML / CSS
AmazeUI导航的示例代码
Aug 14 HTML / CSS
使用HTML+Css+transform实现3D导航栏的示例代码
Mar 31 HTML / CSS
css如何把元素固定在容器底部的四种方式
Jun 16 HTML / CSS
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
Jul 20 #HTML / CSS
HTML5跳转小程序wx-open-launch-weapp的示例代码
Jul 16 #HTML / CSS
uniapp+Html5端实现PC端适配
Jul 15 #HTML / CSS
HTML5获取当前地理位置并在百度地图上展示的实例
Jul 10 #HTML / CSS
HTML5 背景的显示区域实现
Jul 09 #HTML / CSS
HTML5图片层叠的实现示例
Jul 07 #HTML / CSS
HTML5 层的叠加的实现
Jul 07 #HTML / CSS
You might like
使用PHP批量生成随机用户名
2008/07/10 PHP
比较时间段一与时间段二是否有交集的php函数
2011/05/31 PHP
初品cakephp 入门基础
2012/02/16 PHP
PHP 第二节 数据类型之数值型
2012/04/28 PHP
简单的cookie计数器实现源码
2013/06/07 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
2014/06/26 PHP
CSS心形加载的动画源码的实现
2021/03/09 HTML / CSS
javascript import css实例代码
2008/07/18 Javascript
用jquery写的一个万年历(自写)
2014/01/20 Javascript
让html页面不缓存js的实现方法
2014/10/31 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
vue slot 在子组件中显示父组件传递的模板
2018/03/02 Javascript
Vue-cli项目获取本地json文件数据的实例
2018/03/07 Javascript
JS实现的汉字与Unicode码相互转化功能分析
2018/05/25 Javascript
react-native android状态栏的实现
2018/06/15 Javascript
vue中轮训器的使用
2019/01/27 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
2019/09/12 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
Python3访问并下载网页内容的方法
2015/07/28 Python
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
详谈Python高阶函数与函数装饰器(推荐)
2017/09/30 Python
python实现画一颗树和一片森林
2018/06/25 Python
Django ORM 查询管理器源码解析
2019/08/05 Python
Python笔记之facade模式
2019/11/20 Python
pytorch 移动端部署之helloworld的使用
2020/10/30 Python
英国最专业的健身器材供应商之一:Best Gym Equipment
2017/12/22 全球购物
AP澳洲中文网:澳洲正品直邮,包税收件无忧
2019/07/12 全球购物
奶茶店创业计划书范文
2014/01/17 职场文书
学生社团文化节开幕式主持词
2014/03/28 职场文书
美国留学经济担保书
2014/05/20 职场文书
《中国梦我的梦》中学生演讲稿
2014/08/20 职场文书
中学教师师德师风承诺书
2015/04/28 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
详解如何在Canvas中添加事件的方法
2021/04/17 Javascript