首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Canvas drawImage缩放

Canvas drawImage缩放
EN

Stack Overflow用户
提问于 2012-06-01 05:27:28
回答 3查看 76.9K关注 0票数 65

我正在尝试根据画布按比例缩放图像。我可以用固定的宽度和高度缩放它,如下所示:

代码语言:javascript
复制
context.drawImage(imageObj, 0, 0, 100, 100)

但我只想按比例调整宽度和高度。类似于以下内容:

代码语言:javascript
复制
context.drawImage(imageObj, 0, 0, 100, auto)

我已经找遍了我能想到的所有地方,但还没有看到这是否可能。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-01 06:54:56

代码语言:javascript
复制
context.drawImage(imageObj, 0, 0, 100, 100 * imageObj.height / imageObj.width)
票数 106
EN

Stack Overflow用户

发布于 2016-08-05 00:41:55

@TechMaze的解决方案非常好。

下面是在对image.onload事件进行一些更正和介绍之后的代码。为了避免任何形式的扭曲,image.onload是非常重要的。

代码语言:javascript
复制
function draw_canvas_image() {

var canvas = document.getElementById("image-holder-canvas");
var context = canvas.getContext("2d");
var imageObj = document.getElementById("myImageToDisplayOnCanvas");

imageObj.onload = function() {
  var imgWidth = imageObj.naturalWidth;
  var screenWidth  = canvas.width;
  var scaleX = 1;
  if (imgWidth > screenWidth)
      scaleX = screenWidth/imgWidth;
  var imgHeight = imageObj.naturalHeight;
  var screenHeight = canvas.height;
  var scaleY = 1;
  if (imgHeight > screenHeight)
      scaleY = screenHeight/imgHeight;
  var scale = scaleY;
  if(scaleX < scaleY)
      scale = scaleX;
  if(scale < 1){
      imgHeight = imgHeight*scale;
      imgWidth = imgWidth*scale;          
  }

  canvas.height = imgHeight;
  canvas.width = imgWidth;

  context.drawImage(imageObj, 0, 0, imageObj.naturalWidth, imageObj.naturalHeight, 0,0, imgWidth, imgHeight);
}
}
票数 9
EN

Stack Overflow用户

发布于 2015-09-05 02:11:50

如果你想根据屏幕尺寸适当地缩放图片,下面是你可以做的数学运算:如果你没有使用JQUERY,用适当的等价选项替换$(window).width。

代码语言:javascript
复制
var imgWidth = imageObj.naturalWidth;
var screenWidth  = $(window).width() - 20; 
var scaleX = 1;
if (imageWdith > screenWdith)
    scaleX = screenWidth/imgWidth;
var imgHeight = imageObj.naturalHeight;
var screenHeight = $(window).height() - canvas.offsetTop-10;
var scaleY = 1;
if (imgHeight > screenHeight)
    scaleY = screenHeight/imgHeight;
var scale = scaleY;
if(scaleX < scaleY)
    scale = scaleX;
if(scale < 1){
    imgHeight = imgHeight*scale;
    imgWidth = imgWidth*scale;          
}
canvas.height = imgHeight;
canvas.width = imgWidth;
ctx.drawImage(imageObj, 0, 0, imageObj.naturalWidth, imageObj.naturalHeight, 0,0, imgWidth, imgHeight);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10841532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档