当前位置:JS特效 » 图片效果 » h5实现将canvas转换成图片demo
h5实现将canvas转换成图片demo
如果您觉得内容不错,请分享:

插件介绍

###** . 将图片绘制到画布之上**解释:    1. 简单来说,就是将一张图的某个区域,画到画布上的某个区域;    2. 和ctx.fillStyle = pattern不同的是,pattern是将图片作为背景,该背景位置是固定的,画图只是显示那背景某个区域;    3. 而本方法画图是取图的全部/一部分(比如400x400的,取

浏览器兼容性

浏览器兼容性
时间:2021-09-17 阅读:131
简要教程

【案例简介】

###** . 将图片绘制到画布之上**

解释:

    1. 简单来说,就是将一张图的某个区域,画到画布上的某个区域;
    2. 和ctx.fillStyle = pattern不同的是,pattern是将图片作为背景,该背景位置是固定的,画图只是显示那背景某个区域;
    3. 而本方法画图是取图的全部/一部分(比如400x400的,取他(x:200,y:250,width:50,height:100)区域的图;
    4. 然后放在画图的某个指定区域(如坐标x:100,y:200处),也可以缩放图片大小(比如变为width:300,height:200);
    5. 运用场景示例:有一个人物八方向四帧动作图,在一个png图上,可以根据需要,只取其中一个,然后绘制到画布区域之中;

**ctx.drawImage(image, dx, dy)**

    1. 将图片完整绘制在画布的x, y坐标处;
    2. x, y是图片绘制时,其左上角位于画布的坐标,参数类型是Number(不是有px的字符串类型);
    3. 不会对图片进行缩放(即保持图片本身大小);
    4. image是图片HTML元素,例如通过document.getElementById()获取的HTML的image元素,或者是在JS中,通过new Image()创建的图片元素;
    5. 需要小心一件事,图片在创建后,并不会立刻从服务器下载完成,因此假如图片是后续加载的话,务必要等图片onload事件触发后,再进行绘图;
    6. 应对办法:提前将图片下载好,这样绘制的时候就不必担心图片未加载完成的问题了。

**ctx.drawImage(image, dx, dy, dWidth, dHeight)**

    1. 将图片绘制在画布的x, y坐标处;
    2. 本方法在上一个方法的基础上,增加了缩放功能,dWidth和dHeight表示绘制到画布上时,画布上图片的宽高;
    3. 具体来说,假如一个图片是100*100,dWith和dHeight是200*200,就相当于将图片缩放了200%;

**ctx.drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)**

    1. 取出图片的某个区域,然后绘制到画布的某个区域;
    2. dx, dy, dWidth, dHeight和上面2个API表示的内容是一样的;
    3. sx表示图片(即image)取图时的x坐标,sy表示y坐标,sWidth表示从sx开始取的图片的宽度,sHeight表示从sy开始,取的图片的高度;
    4. 示例:假如image的宽高是200*200,这四个参数的值依次是50,50,100,100的话,表示取图片x:50, y:50到x:150, y:150这个范围的区域;
    5. sWidth + sx的值或者sHeight + sy的值可以大于图片本身的宽高,在缩放时,会将超出部分计算在内进行缩放,超出部分视为透明,不会染色;
    6. sWidth和sHeight可以是负数,有效,计算时同样相加即可,同样可以框住一个矩形区域。

具体请参照DEMO:绘制图片.html

###**8. 将canvas转为图片可用的base64字符串**

解释:

    1. 简单来说,就是将canvas标签的画布内容,转为base64字符串;
    2. base64字符串作为img标签的src,是可以直接显示为图片的;

**canvas.toDataURL(type, encoderOptions)**

    1. 返回一个base64字符串;
    2. type可选,表示图片的转换目标类型,类型是字符串,默认是"image/png",如果传的类型不支持/错误,也会自动转为默认的png格式的base64字符串; 
    3. encoderOptions可选,表示图片质量,范围0-1,1质量最好,如果超出取值范围,将会使用默认值0.92;
    4. 该字符串可以作为img标签的src的值,可以正常显示为图片。

注:

    1. 不知为何,在未设置strokeStyle时,我画一个矩形,我转为“image/jpeg”类型图片,输出的图片是纯黑色(见DEMO):
    2. 不知为何,图片质量我设置后并没有生效(值为1和值为0.1转换出来的字符串,其值是相同的,见DEMO);



【案例截图】

【核心代码】


  //画个图片
    var canvas2 = document.getElementById("canvas2");
    var ctx2 = canvas2.getContext("2d");
    var girl = new Image();
    girl.src = './02.png';
    girl.onload = function () {
        ctx2.drawImage(girl, 0, 0);
    }

    function toAppendImage2() {
        var test = document.getElementById("test2");
        test.removeChild(test.children[0]);
        //创建一个image类型HTML元素
        var img1 = new Image();
        //将canvas2转为base64字符串
        img1.src = canvas2.toDataURL("image/jpeg", 1);
        var a = img1.src;
        console.log(img1.src);
        //将图片添加到div里
        test.appendChild(img1);
        //创建一个image类型HTML元素
        var img2 = new Image();
        //将canvas2转为base64字符串
        img2.src = canvas2.toDataURL("image/jpeg", 0);
        var b = img2.src;
        console.log(a === b);
        //将图片添加到div里
        test.appendChild(img2);
    } 


Top