canvas图片操作

简介: canvas图片操作

素材链接:卡通头像 - Bing

一、drawImage()绘制

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>canvas</title>
</head>
<body>
<div><img src="../img/demo.png" alt=""></img></div>
<div>
    <canvas id="myCanvas" width="400" height="400">你的浏览器不支持HTML5</canvas>
</div>
</body>
<script>
    var c = document.getElementById("myCanvas");
    var ctx = c.getContext("2d");
    var image = new Image();
    image.src = "../img/demo.png";
    image.onload = function () {
        //以(10,10)为顶点,绘制图像
        ctx.drawImage(image, 10, 10);
        //以(110,10)为顶点,绘制宽度110,高度为110图像
        ctx.drawImage(image, 110, 10, 110, 110);
        //图片从(10,10)剪切宽度50,高度50,显示到(210,10) 宽度150,高度150
        ctx.drawImage(image, 10, 10, 50, 50, 210, 10, 150, 150);
 
    }
</script>
</html>

 //以(10,10)为顶点,绘制图像
 ctx.drawImage(image, 10, 10);

//以(110,10)为顶点,绘制宽度110,高度为110图像
ctx.drawImage(image, 110, 10, 110, 110);

  //图片从(10,10)剪切宽度50,高度50,显示到(210,10) 宽度150,高度150
 ctx.drawImage(image, 10, 10, 50, 50, 210, 10, 150, 150);

二、getImageData()与putImageData()绘制图片

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>canvas</title>
</head>
<body>
<div><img src="../img/demo.png" alt=""></img></div>
<div>
    <canvas id="myCanvas" width="600" height="600">你的浏览器不支持HTML5</canvas>
</div>
</body>
<script>
    var c = document.getElementById("myCanvas");
    var ctx = c.getContext("2d");
    var image = new Image();
    image.src = "../img/demo.png";
    image.onload = function () {
        //以(10,10)为顶点,绘制图像
        ctx.drawImage(image, 10, 10);
        //开始复制位置(20,20),复制宽度100,复制高度100
        var imgData = ctx.getImageData(20, 20, 100, 100);
        //将复制图像显示至(300,20)位置
        ctx.putImageData(imgData, 300, 20);
        //在(400,20)位置显示,图像(20,20)宽度50,高度50
        ctx.putImageData(imgData, 400, 20, 20, 20, 50, 50)
    }
</script>
</html>


三、createImageData()新建像素

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>canvas</title>
</head>
<body>
<div><img src="../img/demo.png" alt=""></img></div>
<div>
    <canvas id="myCanvas" width="600" height="600">你的浏览器不支持HTML5</canvas>
</div>
</body>
<script>
    var c = document.getElementById("myCanvas");
    var ctx = c.getContext("2d");
    var image = new Image();
    image.src = "../img/demo.png";
    image.onload = function () {
        //以(10,10)为顶点,绘制图像
        ctx.drawImage(image, 10, 10);
        //开始复制位置(20,20),复制宽度100,复制高度100
        var imgData = ctx.getImageData(20, 20, 100, 100);
        //创建空白imageData,宽度和高度使用imgData的宽度和高度(100,100)
        var imageData01 = ctx.createImageData(imgData);
        //填充imageData颜色和透明度grba
        for (var i = 0; i < imageData01.width * imageData01.height * 4; i += 4) {
            imageData01.data[i + 0] = 255;
            imageData01.data[i + 1] = 0;
            imageData01.data[i + 2] = 0;
            imageData01.data[i + 3] = 255;
        }
        //将复制图像显示至(10, 300)位置
        ctx.putImageData(imageData01, 10, 300);
        //创建空白imageData
        var imageData02 = ctx.createImageData(100,100);
        for (var i = 0; i < imageData02.width * imageData02.height * 4; i += 4) {
            imageData02.data[i + 0] = 255;
            imageData02.data[i + 1] = 0;
            imageData02.data[i + 2] = 0;
            imageData02.data[i + 3] = 155;
        }
        //将复制图像显示至(120, 300)位置
        ctx.putImageData(imageData02, 120, 300);
    }
</script>
</html>
 

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>canvas</title>
</head>
<body>
<div><img src="../img/demo.png" alt=""></img></div>
<div>
    <canvas id="myCanvas" width="600" height="600">你的浏览器不支持HTML5</canvas>
</div>
</body>
<script>
    var c = document.getElementById("myCanvas");
    var ctx = c.getContext("2d");
    var image = new Image();
    image.src = "../img/demo.png";
    image.onload = function () {
        //以(10,10)为顶点,绘制图像
        ctx.drawImage(image, 10, 10);
        //开始复制位置(20,20),复制宽度100,复制高度100
        var imgData = ctx.getImageData(20, 20, 100, 100);
        //创建空白imageData,宽度和高度使用imgData的宽度和高度(100,100)
        var imageData01 = ctx.createImageData(imgData);
        //填充imageData颜色和透明度grba
        for (var i = 0; i < imageData01.width * imageData01.height * 4; i += 4) {
            imageData01.data[i + 0] = random(0,255);
            imageData01.data[i + 1] = random(0,125);
            imageData01.data[i + 2] = random(125,255);
            imageData01.data[i + 3] = random(0,255);
        }
        //将复制图像显示至(10, 300)位置
        ctx.putImageData(imageData01, 10, 300);
        //创建空白imageData
        var imageData02 = ctx.createImageData(100,100);
        for (var i = 0; i < imageData02.width * imageData02.height * 4; i += 4) {
            imageData02.data[i + 0] = random(0,255);
            imageData02.data[i + 1] = random(125,255);
            imageData02.data[i + 2] = random(0,125);
            imageData02.data[i + 3] = random(0,255);
        }
        //将复制图像显示至(120, 300)位置
        ctx.putImageData(imageData02, 120, 300);
    }
    function random(min, max) {
        return Math.floor(Math.random() * (max - min)) + min;
    }
</script>
</html>
 

相关文章
|
前端开发 JavaScript
【JavaScript原型链prototype详解】
在JavaScript中,每个对象都有一个原型(prototype)属性,它指向另一个对象。这个被指向的对象也有自己的原型,以此类推,最终形成了一个原型链。原型链的顶端是Object.prototype,它是所有对象的根原型。 当我们访问一个对象的属性时,如果该对象自身没有这个属性,JavaScript会沿着原型链向上查找,直到找到匹配的属性或者到达原型链的末端。
415 0
【JavaScript原型链prototype详解】
|
前端开发 JavaScript
uniapp移动端悬浮按钮(吸附边缘)
uniapp移动端悬浮按钮(吸附边缘)
794 0
|
资源调度 前端开发 算法
前端依赖版本重写指南
感谢神奇的 Semver 动态规则,npm 社区经常会发生依赖包更新后引入破坏变更的情况(应用没有使用依赖锁的话),而应用开发者就要在自己的依赖声明里先临时绕过,避免安装到有问题的版本,如果是一级依赖,只需要改 package.json 的声明就可以了,但如果是子依赖,就需要进行版本重写(overrides/resolution)了。本文是一篇针对版本重写功能的指南性文章,当你遇到如下的问题时,就可以按照对应的依赖重写语法,解决这些依赖问题了。
7916 1
前端依赖版本重写指南
语雀的markdown常用语法
语雀的markdown常用语法
8825 0
语雀的markdown常用语法
|
移动开发 JavaScript 小程序
小程序开发.uniapp.生命周期
小程序开发.uniapp.生命周期
992 0
|
资源调度 监控 前端开发
第七章(原理篇) 微前端技术之依赖管理与版本控制
第七章(原理篇) 微前端技术之依赖管理与版本控制
664 0
|
移动开发 JavaScript 前端开发
【Uniapp 专栏】Uniapp 与 Flutter 的功能特点对比
【5月更文挑战第15天】Uniapp 和 Flutter 是跨平台开发的热门框架。Uniapp 以其强大的跨平台兼容性和基于 Vue.js 的易学性著称,适合快速开发适用于 iOS、Android 和 H5 的应用。其丰富的组件生态简化了功能集成。然而,在复杂场景下,性能可能不及原生。Flutter 则以其全新渲染引擎实现流畅界面和高度自定义,性能接近原生,但学习成本较高,需处理特定平台适配。适用于高要求的项目。两者各有优势,选择应考虑项目需求、技术储备和开发周期。
1920 1
【Uniapp 专栏】Uniapp 与 Flutter 的功能特点对比
|
JavaScript 前端开发
Vue2整合TypeScript:借助vue-property-decorator以类模式编写组件
Vue2整合TypeScript:借助vue-property-decorator以类模式编写组件
698 3
|
JavaScript 前端开发
JS如何把身份证处理成中间几位变成*号呢
JS如何把身份证处理成中间几位变成*号呢
408 1