canvas生成不同质量的图片

340 阅读2分钟

我正在参加「码上掘金挑战赛」详情请看:码上掘金挑战赛来了!

前言

大家好,我是小阵 🔥,一路奔波不停的码字业务员
如果喜欢我的文章,可以关注 ➕ 点赞,与我一同成长吧~😋
加我微信:zzz886885,邀你进群,一起学习交流,摸鱼学习两不误🌟

开开心心学技术大法~~

开心

来了来了,他真的来了~

正文

先看效果

iShot_2022-09-22_23.47.09

实现思路

  • 通过canvas的toDataURL将canvas转换成图片base64

  • toDataURL的第一个参数可以规定生成的哪种图片的base64

  • 第二个参数为生成的图片质量,0~1之间即可

    • 0质量最差
    • 1是完整的质量
    • 根据不同质量生成的base64大小差距极大
  • 然后是canvas的绘制

  • 这个没什么特别要求,哪怕是空白的canvas也可以转换成图片base64

  • 我这里是画了一个圆和一个正方形,边缘这是通过css来控制的

  • 为了对比不同质量的图片,通过循环生成了从0到1的十张图片

  • 然后生成了黑背景与白背景图片方便对比观看

具体实现

html实现

<body>
  <h2>Canvas</h2>
  <canvas id="c" width="100"></canvas>
</body>

初始化一个canvas用来绘制图案

静态css

canvas { border: 1px solid green; }
img { border: 1px solid blue }

给canvas跟生成的img画上边缘

生成不同质量的图片

生成函数

function test(label) {
  ctx.strokeStyle = 'red';
  ctx.lineWidth = 1;
  ctx.arc(50,50,30.5,0,Math.PI*2,true);
  ctx.stroke();
​
  ctx.lineWidth = 2;
  ctx.strokeRect(40.5,40.5,20,20);
​
  document.write('<h2>' + label + '</h2>');
  for (var i = 0; i < 1; i += 0.1) {
    document.write('<p>');
    document.write('<span>Quality: <b>' + i.toFixed(1) + '</b></span>');
    document.write('<img src="' + canvasEl.toDataURL('image/jpeg', i) + '">');
    document.write('</p>');
  }
}

生成黑背景图片与白背景图片

 // no background
test('toDataURL("image/jpeg", &hellip;), no background');
​
ctx.fillStyle = 'white';
ctx.fillRect(0,0,ctx.canvas.width,ctx.canvas.height);
​
// white background
test('toDataURL("image/jpeg", &hellip;), white background');

完整代码

掘金代码块不生效,可以复制到本地查看效果哦~

总结

  • 主要是canvas的toDataURL的使用

结语

如果文章真的有帮到你,希望可以多多点赞、收藏、关注支持一波呀!!小阵会很开心哒~

热爱开源,支持开源,拥抱开源!

文章如有错误或不严谨之处,还望指出,感谢感谢!!!

加油!

往期好文推荐