【问题标题】:How to Center Image above another image inside canvas element如何在画布元素内的另一个图像上方居中图像
【发布时间】:2020-10-17 22:26:58
【问题描述】:

我正在尝试在画布元素中的另一个图像上方添加图像

我想要达到的目标:

这是我得到的:

图片来源:https://imgur.com/gallery/jaSdhQ9

这是我的代码:

var shirt = new Image();
shirt.src = "https://i.imgur.com/3rTZGXP.png";

var draw = new Image();
draw.src = "https://i.imgur.com/2abnbj1.png";
//draw.src = "https://i.imgur.com/TSJRGjo.png";




window.onload = function() {
var canvas = document.getElementById("canvas");

var ctx = canvas.getContext("2d");    
ctx.fillStyle = "blue";
ctx.fillRect(0, 0, canvas.width, canvas.height);


ctx.drawImage(draw,0,0 );




ctx.drawImage(shirt,0,0,canvas.width,canvas.height);
}
#canvas{
    width: 352px;
    height: 448px; 
    left: 0px; 
    top: 0px; 
    user-select: none; 
    cursor: default;
}
<canvas id="canvas" width="352" height="448"></canvas>

【问题讨论】:

    标签: javascript html canvas android-canvas


    【解决方案1】:

    感谢@tokage-dizayn 和https://stackoverflow.com/a/19473880/7511165

    我来到了这段代码

    var shirt = new Image();
    shirt.src = "https://i.imgur.com/3rTZGXP.png";
    
    var draw = new Image();
    draw.src = "https://i.imgur.com/2abnbj1.png";
    //draw.src = "https://i.imgur.com/TSJRGjo.png";
    
    
    
    
    window.onload = function() {
      var canvas = document.getElementById("canvas");
    
        var ctx = canvas.getContext("2d");    
        ctx.fillStyle = "blue";
        ctx.fillRect(0, 0, canvas.width, canvas.height);
        
        console.log(draw.height,draw.width);
        
        var maxSize  = 160;
        var ratio = Math.min(maxSize  / draw.width, maxSize / draw.height);
        var width= draw.width*ratio, 
            height= draw.height*ratio;
        
        console.log(ratio,width,height);
    
            
        ctx.drawImage(draw,95,90,width,height);
        
        
        
        
        ctx.drawImage(shirt,0,0,canvas.width,canvas.height);
    }
    #canvas{
        width: 352px;
        height: 448px; 
        left: 0px; 
        top: 0px; 
        user-select: none; 
        cursor: default;
    }
    <canvas id="canvas" width="352" height="448"></canvas>

    【讨论】:

      【解决方案2】:

      你可以这样设置 ctx.drawImage(draw,100,30,90,50);

      var shirt = new Image();
      shirt.src = "https://i.imgur.com/3rTZGXP.png";
      
      var draw = new Image();
      draw.src = "https://i.imgur.com/2abnbj1.png";
      //draw.src = "https://i.imgur.com/TSJRGjo.png";
      
      
      
      
      window.onload = function() {
      var canvas = document.getElementById("canvas");
      
      var ctx = canvas.getContext("2d");    
      ctx.fillStyle = "blue";
      ctx.fillRect(0, 0, canvas.width, canvas.height);
      
      
      ctx.drawImage(draw,80,25,135,55 );
      
      
      
      
      ctx.drawImage(shirt,0,0,canvas.width,canvas.height);
      }
      #canvas{
          width: 352px;
          height: 448px; 
          left: 0px; 
          top: 0px; 
          user-select: none; 
          cursor: default;
      }
      <canvas id="canvas"></canvas>

      【讨论】:

      • 我不知道为什么,但是图像“draw”质量太差了!
      • 您必须在绘制之前缩放图像以获得更好的质量
      【解决方案3】:

      我想你要找的是flex-box

      #canvas{
        display:flex;
        justify-content: center;
        align-content: center;
      }
      

      Here你可以阅读更多关于flex-box的信息

      【讨论】:

      • 谢谢分享,当然不是!它与 JS 相关,而不是 CSS,阅读更多关于 CANVAS
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 2015-09-23
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多