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 相关文章推荐
CSS3地图动态实例代码(圆圈向外扩散)
Jun 15 HTML / CSS
css3中背景尺寸background-size详解
Sep 02 HTML / CSS
使用CSS3来制作消息提醒框
Jul 12 HTML / CSS
CSS3 :default伪类选择器使用简介
Mar 15 HTML / CSS
详解css3使用transform出现字体模糊的解决办法
Oct 16 HTML / CSS
HTML5: Web 标准最巨大的飞跃
Oct 17 HTML / CSS
IE9下html5初试小刀
Sep 21 HTML / CSS
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
Jan 31 HTML / CSS
html5教程制作简单画板代码分享
Dec 04 HTML / CSS
HTML5实现晶莹剔透的雨滴特效
May 14 HTML / CSS
HTML5+CSS3模仿优酷视频截图功能示例
Jan 05 HTML / CSS
HTML5 播放 RTSP 视频的实例代码
Jul 29 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实现MVC开发得最简单的方法――模型
2007/04/10 PHP
用PHP连接MySQL代码的参数说明
2008/06/07 PHP
PHP session有效期问题
2009/04/26 PHP
php操作(删除,提取,增加)zip文件方法详解
2015/03/12 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
PHP程序守护进程化实现方法详解
2020/07/16 PHP
ajax无刷新动态调用股票信息(改良版)
2008/11/01 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
jquery实现多行文字图片滚动效果示例代码
2014/10/10 Javascript
JavaScript操作Cookie详解
2015/02/28 Javascript
nodejs创建web服务器之hello world程序
2015/08/20 NodeJs
浅析函数声明和函数表达式——函数声明的声明提前
2016/05/03 Javascript
微信小程序 swiper组件详解及实例代码
2016/10/25 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
jquery中done和then的区别(详解)
2017/12/19 jQuery
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
Python中存取文件的4种不同操作
2018/07/02 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
2019/08/13 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
2020/03/02 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
探讨HTML5移动开发的几大特性(必看)
2015/12/30 HTML / CSS
戴森美国官网:Dyson美国
2016/09/11 全球购物
印尼在线精品店:Berrybenka.com
2016/10/22 全球购物
法院实习人员自我鉴定
2013/09/26 职场文书
货代行业个人求职简历的自我评价
2013/10/22 职场文书
创业者迈进成功第一步:如何写创业计划书?
2014/03/22 职场文书
大学国际贸易专业自荐信
2014/06/05 职场文书
教师节感谢信
2015/01/22 职场文书
2015年设计师个人工作总结
2015/04/25 职场文书
爱心捐书倡议书
2015/04/27 职场文书
房屋产权证明书
2015/06/19 职场文书
开网店计划分析
2019/07/30 职场文书
使用numpy实现矩阵的翻转(flip)与旋转
2021/06/03 Python
java Nio使用NioSocket客户端与服务端交互实现方式
2021/06/15 Java/Android