首页 > 其他分享 >canvas实现图片镜像翻转的2种方式

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

时间:2023-04-07 10:45:27浏览次数:35  
标签:canvas img ctx newData var 镜像 data sourceData 翻转

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

原文引用:https://www.qetool.com/scripts/view/23387.html

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,img,ctx,newData,var,镜像,data,sourceData,翻转
From: https://www.cnblogs.com/yaosusu/p/17295416.html

相关文章

  • ImageView翻转效果
    点击图中的星星开始翻转源码:importandroid.content.Context;importandroid.content.res.TypedArray;importandroid.graphics.Bitmap;importandroid.graphics.Camera;importandroid.graphics.Matrix;importandroid.graphics.drawable.BitmapDrawab......
  • 861. 翻转矩阵后的得分
    题目描述给了一个二维矩阵,矩阵的元素不是0就是1你可以进行任意次操作,让某行或者某列进行翻转元素的得分是每一行二进制的和问怎么操作可以让总得分最大?f1贪心+计算增量基本分析为啥可以贪心?(1)对每行来说,首位肯定是1最好,遮掩某些行需要翻转,某些不翻;(2)对同一列来说,大家的优先......
  • canvas基础1
    canvas基础1一、canvas是HTML5提供的画画本//创建<canvas>元素时至少要设置其width和height属性,这样才能告诉浏览器在大面积上绘图。//出现在开始和结束标签之间的内容是后备数据,会在浏览器不支持<canvas>元素时显示。<canvasid="drawing"width="200"height=......
  • canvas绘制3D金字塔
    varcanvas1=document.getElementById("canvas1");varcontext=canvas1.getContext("2d");canvas1.width=400;canvas1.height=400;context.beginPath();context.moveTo(0,360);context.lineTo(200,400);context.lineTo(400,360)......
  • Docker 查看Image镜像的Dockerfile方法
    Dokcer中使用的Image镜像可能别人写好,我们下载来直接使用,但有些情况可能不能满足我们的需求,那就需要修改镜像,一般可以通过在容器中修改,之后在生成镜像,但有时则需要通过写Dockerfile来重新生成。本文主要介绍Docker中查看Image镜像的Dockerfile的方法。原文地址:Docker查看Image镜......
  • Docker制作一个镜像完整过程
    前言以制作CentOS镜像为例,讲述对镜像自定义,打包以及推送的远程仓库的过程,步骤都比较简单可以快速上手。创建步骤创建CentOS基础镜像创建构建目录和Dockerfile,在Dockerfile中编辑镜像相关设置,参考菜鸟教程-Dockerfile。echo"在当前用户目录下创建创建目录docker/build/cent......
  • 25. K 个一组翻转链表
    25.K个一组翻转链表给你链表的头节点head,每 k 个节点一组进行翻转,请你返回修改后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。......
  • docker打包、压缩镜像并载入
    1、打包镜像#docker打包所有镜像dockersave$(dockerimages--format'{{.Repository}}:{{.Tag}}')-oallimages.tar#打包指定镜像,使用grep过滤dockersave$(dockerimages--format'{{.Repository}}:{{.Tag}}'|grepopenjdk)-oopenjdk.tar 2、打包并压......
  • Docker 镜像及容器命令
    授人以鱼不如授人以渔,先列出官方命令文档docker命令文档地址:https://docs.docker.com/engine/reference/commandline/images/镜像相关指令镜像是容器的模板,这句话是考点,记住啦docker镜像基本命令大致分为,查看镜像,搜索镜像,下载镜像、删除镜像1、查看镜像查看镜像命令/doc......
  • PyPI 镜像
    临时使用pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simplesome-package注意,simple不能少,是https而不是http设为默认升级pip到最新的版本(>=10.0.0)后进行配置:python-mpipinstall--upgradepip清华的pipconfigsetglobal.index-urlhttps://pypi.......