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和html制作泡沫对话框实现代码
Mar 21 HTML / CSS
CSS3制作ajax loader icon实现思路及代码
Aug 25 HTML / CSS
使用CSS3实现一个3D相册效果实例
Dec 03 HTML / CSS
详解css3使用transform出现字体模糊的解决办法
Oct 16 HTML / CSS
HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)
Jan 05 HTML / CSS
HTML5标签小集
Aug 02 HTML / CSS
HTML5 video 视频标签使用介绍
Feb 03 HTML / CSS
深入浅析HTML5中的SVG
Nov 27 HTML / CSS
使用HTML和CSS实现的标签云效果(附demo)
Feb 03 HTML / CSS
老生常谈 使用 CSS 实现三角形的技巧(多种方法)
Apr 13 HTML / CSS
详解CSS不受控制的position fixed
May 25 HTML / CSS
html5+实现plus.io进行拍照和图片等获取
Jun 01 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
历史证明,懒惰才是推动科学发展技术进步的动力
2021/03/02 无线电
WINXP下apache+php4+mysql
2006/11/25 PHP
最新制作ThinkPHP3.2.3完全开发手册
2015/11/23 PHP
简单概括PHP的字符串中单引号与双引号的区别
2016/05/07 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
2016/12/15 PHP
PHPExcel导出2003和2007的excel文档功能示例
2017/01/04 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
2019/07/20 PHP
用js格式化金额可设置保留的小数位数
2014/05/09 Javascript
jQuery+ajax实现鼠标单击修改内容的方法
2014/06/27 Javascript
js获取字符串最后一位方法汇总
2014/11/13 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
使用do...while的方法输入一个月中所有的周日(实例代码)
2016/07/22 Javascript
jq给页面添加覆盖层遮罩的实例
2017/02/16 Javascript
JS实现unicode和UTF-8之间的互相转换互转
2017/07/05 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
NW.js 简介与使用方法
2018/02/01 Javascript
vue页面切换到滚动页面显示顶部的实例
2018/03/13 Javascript
Vue keepAlive 数据缓存工具实现返回上一个页面浏览的位置
2019/05/10 Javascript
vue(2.x,3.0)配置跨域代理
2019/11/27 Javascript
JavaScript享元模式原理与用法实例详解
2020/03/09 Javascript
javascript实现前端分页效果
2020/06/24 Javascript
[04:03]DOTA2英雄梦之声_第02期_风暴之灵
2014/06/30 DOTA
Python下rrdtool模块的基本使用方法
2015/11/13 Python
Django使用HttpResponse返回图片并显示的方法
2018/05/22 Python
Python中最大递归深度值的探讨
2019/03/05 Python
Python的numpy库下的几个小函数的用法(小结)
2019/07/12 Python
django 中QuerySet特性功能详解
2019/07/25 Python
Python字符串三种格式化输出
2020/09/17 Python
Weekendesk意大利:探索多种引人入胜的周末主题
2016/10/14 全球购物
Myprotein亚太地区:欧洲第一在线运动营养品牌
2020/12/20 全球购物
求∏的近似值,直到最后一项的绝对值小于指定的数
2016/02/12 面试题
营销与策划应届生求职信
2013/11/04 职场文书
外贸员简历中的自我评价
2014/03/04 职场文书
教师专业自荐信
2014/05/31 职场文书
小学生作文写作技巧100例,非常实用!
2019/07/08 职场文书
一文读懂go中semaphore(信号量)源码
2021/04/03 Golang