• 图片 视频和Canvas的相互转换


    drawImage方法的参数数量只能是3,5,9

    1、参数数量为3时
    img、x、y为必填参数
    x、y为在canvas画布上的起始坐标点,默认使用整个canvas画布

    2、参数数量为5时
    参数依次为img、x、y、width、height
    width和height为要绘制的canvas画布的长宽

    3、参数数量为9时
    所有参数都使用
    所绘制的图像源的起始坐标、长宽
     

    一、图片转 Canvas&base64

    1. //一般宽高不会定死而是在js里赋值 也可以通过样式设置
    2. <canvas id="myCanvas" width="500" height="300">您的浏览器不支持Canvas!</canvas>
    1. var canvas = document.getElementById("myCanvas");
    2. imageToCanvas(canvas,"1.jpg");
    3. function imageToCanvas(canvas,url) {
    4. //可以通过new一个img或者创建一个img
    5. var img = new Image(); // let img=document.createElement('img')
    6. img.src = url;
    7. img.onload = function(){
    8. canvas.width=hi.width
    9. canvas.height=hi.height
    10. canvas.getContext("2d").drawImage(img,0,0, canvas.width,canvas.height); //绘图完成
    11. //还可以转为base64形式 *最好不要转为png格式 因为字符过多浏览器地址栏放不下会导致部分图片不显示
    12. const base=canvas.toDataURL('image/jpeg')
    13. //这个base可以直接赋值给img.url显示
    14. }
    15. }
    16. //FileReader也能转base64
    17. var reader = new FileReader();
    18. reader.readAsDataURL(img );
    19. reader.onload = function () {
    20. console.log( reader.result )
    21. }

    多个图片批量转canvas

    html

    1. <canvas v-for="(item,index) in i" :key="index"
    2. //id控制
    3. :id="'canvas'+index" width="500" height="500">
    4. 您的浏览器不支持Canvas!{{item}}
    5. </canvas>

    data

    1. i: ['https://vkceyugu-backup.cdn.bspapp.com/VKCEYUGU-bdbeaf13-95b3-48c4-a13b-687691a23e5f/7c0c7e24-47c0-4cf2-b609-1a73cda9490b.jpg',
    2. 'https://vkceyugu-backup.cdn.bspapp.com/VKCEYUGU-bdbeaf13-95b3-48c4-a13b-687691a23e5f/94d3e05c-6715-434f-a23f-e7da5da5fa3d.PNG'
    3. ],

    js

    1. async mounted() {
    2. for(var i = 0; i < this.i.length; i++){
    3. //获取id
    4. let canvas = document.getElementById(`canvas${i}`);
    5. imageToCanvas(canvas, this.i[i]);
    6. function imageToCanvas(canvas, url) {
    7. let img = new Image();
    8. img.src = url;
    9. let ctx = canvas.getContext("2d");
    10. img.onload = function () {
    11. console.log('图片加载成功');
    12. //最后2参数为图片大小
    13. ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
    14. }
    15. }
    16. }}

    动态控制canvas图片的大小和解决模糊问题

    在canvas上定义class  设置宽高初始值

    1. //html
    2. <canvas ref="canva" class="can" id="myCanvas" style="background:transparent;">您的浏览器不支持Canvas!</canvas>
    3. //css
    4. .can {
    5. width: 90%;
    6. margin-top: 20px;
    7. margin-left: 5%;
    8. height: v-bind('actHeight.height');
    9. }

     为了使绘制出的图片长宽比例不变 我在html里定义一个img元素 用v-if控制它的存在与销毁 设置它的宽度为我想要的canvas图片的宽度 之后在Mount里获取img的高度 这个高度是图片保持正常比例的高度 

    1. //html
    2. <img class="pic" v-if="actHeight.height=='100px'" ref="Vimg" style=" z-index: -100;" :src="picAddress">
    3. //css
    4. .pic {
    5. width: 90%;
    6. position: absolute;
    7. left: 0;
    8. z-index: -100;
    9. height: auto;
    10. }

       在js里可以通过放大一倍canvas大小,但是通过css保持canvas大小不变,然后再绘制进canvas中,这样在canvas放大一倍的情况下绘制进去图片,然后通过css缩小canvas到原来大小达到目的。

    1. let actHeight = ref({ height: '100px' })
    2. const Vimg = ref()
    3. const canva = ref()
    4. onMounted(() => {
    5. let canvas = document.getElementById("myCanvas");
    6. imageToCanvas(canvas, picAddress.value);
    7. })
    8. const imageToCanvas = function (canvas, url) {
    9. let img = new Image();
    10. img.src = url;
    11. img.onload = function () {
    12. let ctx = canvas.getContext("2d");
    13. //获取图片正常比例的宽高后x2 赋值给canvas的宽高 再绘图
    14. 通过css控制canvas恢复到我们想要大小达到清晰绘制目的。
    15. canvas.width = Vimg.value.clientWidth * 2
    16. canvas.height = Vimg.value.clientHeight * 2
    17. ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
    18. actHeight.value.height = Vimg.value.clientHeight + 'px'
    19. }
    20. }

    把视频的当前帧克隆到Canvas:
    (每20毫秒,代码就会绘制视频视频的当前帧)
      示例:

    1. var v=document.getElementById("video1");
    2. var c=document.getElementById("myCanvas");
    3. ctx=c.getContext('2d');
    4. v.addEventListener('play',function() {
    5.     var i=window.setInterval(function() {
    6.         ctx.drawImage(v,0,0,270,135);
    7.     },20);},false);
    8. v.addEventListener('pause',function() {
    9.     window.clearInterval(i);
    10. },false);
    11. v.addEventListener('ended',function() {
    12.     clearInterval(i);
    13. },false);


    Canvas转图片
    function canvasToImage(canvas) {
        var image = new Image();
        image.src = canvas.toDataURL("image/png");  //把canvas转换成base64图像保存
        return image;
    }
     

  • 相关阅读:
    可添加头尾的RecycleView的实现
    自动化Conda包构建的艺术:使用conda smithy工具的指南
    开发工具安装
    ZYNQ的程序固化
    版权登记范围
    Json对象
    在ubuntu下远程链接仓库gitte/github
    高压互锁(HVIL)
    论文复现--lightweight-human-pose-estimation-3d-demo.pytorch(单视角多人3D实时动作捕捉DEMO)
    [Power Query] 删除重复项
  • 原文地址:https://blog.csdn.net/Noctis99/article/details/126951818