How to proportionally resize an image in canvas?

后端 未结 2 2182
猫巷女王i
猫巷女王i 2020-12-16 20:41

AFAIK, to resize a loaded image in HTML5 canvas would be done like this:

var img = new Image();
img.onload = function () {
  ctx.drawImage(img, 0, 0, 300, 20         


        
相关标签:
2条回答
  • 2020-12-16 21:29

    Get the img.width and img.height, then calculate the proportional height according to what width you're sizing to.

    For example:

    ctx.drawImage(img, 300, 0, 300, img.height * (300/img.width));
    
    0 讨论(0)
  • 2020-12-16 21:34

    I wrote a blog article on this topic last last year. You can read it here. Basically it provides a function for scaling an image with a proper aspect ratio. It includes supporting both landscape and portrait orientations and sizing between the two. You can even choose between "letterbox" and "pan and scan (zoom)" mode.

    It was written with div positioning in mind, but could be easily be understood for canvas.

    Near the bottom of the page is the "ScaleImage" function. That might be what you want. Then you can apply it as follows:

    var img = new Image();
    img.onload = function () {
    
      var result = ScaleImage(img.width, img.height, 300, 200, true);
    
      ctx.drawImage(img, result.targetleft, result.targettop, result.width, result.height); // resizes image to a target size of 300x200 using letterbox mode
    }
    img.src = 'images/myimage.jpg';
    

    You can replace result.targetleft and result.targettop with "0" if you don't want the image centered.

    0 讨论(0)
提交回复
热议问题