canvas像素操作

1.ImageData对象

ImageData对象表示图像数据,存储canvas对象真实的像素数据

属性

width:返回ImageData对象的宽度,单位:像素

height:返回ImageData对象的高度,单位:像素

data:返回一个对象,包含指定ImageData对象的图像数据

图像数据是一个数组,包含RGBA格式的整型数据,范围值0-255,每个像素用4个值来表示,分别是红、绿、蓝、透明值。对于透明值,0是透明,255是完全可见

数组格式:[r1,g1,b1,a1,r2,g2,b2,a2,...]

2.创建图像数据

使用createImageData()方法可以创建一个新的、空白的ImageData对象。

具体用法

    //以指定的尺寸(单位:像素)创建新的ImageData对象
    var imgData=context.createImageData(width,height);
    //创建一个新对象,和imgData对象尺寸相同(不会复制图像的data)
    var imgData=context.createImageData(imgData);

3.将图像数据写入画布

putImageData()方法可以将图像数据从指定的ImageData对象写入画布

putImageData(imgData,x,y,dirtyX,dirtyY,dirtyWidth,dirtyHeight);

imgData:要写入画布的imgData对象

x:imgData对象左上角的x坐标

y:imgData对象左上角的y坐标

dirtyX:可选参数,在画布上放置图像的x轴位置

dirtyY:可选参数,在画布上放置图像的y轴位置

dirtyWidth:可选参数,在画布上绘制图像的宽度

dirtyHeight:可选参数,在画布上绘制图像的高度

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>像素操作</title>
</head>
<body>
<canvas id="myCanvas"></canvas>
<script>
    let ctx=document.getElementById("myCanvas").getContext("2d");
    let imgData=ctx.createImageData(100,100);
    for(let i=0;i<imgData.data.length;i+=4){
        imgData.data[i]=255;
        imgData.data[i+1]=0;
        imgData.data[i+2]=0;
        imgData.data[i+3]=255;
    }
    ctx.putImageData(imgData,10,10);
</script>
</body>
</html>

4.在画布中复制图像数据

var imgData=context.getImageData(x,y,width,height);

x:开始复制的左上角的位置的x坐标

y:开始复制的左上角的位置的y坐标

width:将要复制的矩形区域的宽度

height:将要复制的矩形区域的高度

5.保存图片

canvas.toDataURL(type,encodeOptions);

该方法可以将画布保存为图片,返回一个包含图片展示的data URL

data URL:是一种base64位编码的URL

type:可选参数,默认是image/png

encodeOptions:可选参数,默认是0.92。当指定图片格式为image/jpeg或image/webp的时候,可以设置图片的质量,取值从0到1。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>下载画布</title>
</head>
<body>
<canvas id="myCanvas" width="200" height="200"></canvas>
<button id="downloadImageBtn" onclick="saveAsLocalImage()">下载图像</button>
<script type="text/javascript">
    window.onload=function (){
        let canvas=document.getElementById("myCanvas");
        let ctx=canvas.getContext("2d");
        ctx.fillStyle="rgb(0,0,255)";
        ctx.fillRect(60,70,50,50);
        ctx.fillStyle="rgb(255,255,0)";
        ctx.fillRect(10,20,50,50);
    }
    function saveAsLocalImage() {
        let canvas=document.getElementById("myCanvas");
        let image=canvas.toDataURL().replace("image/png", "image/octet-stream");
        window.location.href=image;
    }
</script>
</body>
</html>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漂流の少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值