【问题标题】:setAttribute of newImage()newImage() 的 setAttribute
【发布时间】:2016-03-16 23:16:05
【问题描述】:

我正在通过 FileReader() 读取图像并创建一个新的图像对象以放入画布中。我成功地将图像放入我的画布,但我无法设置宽度和高度的属性以适合我的 600x800 画布。图像保留其原始大小。如何更改新 Image 对象的尺寸?

reader.onload = function(e) {
    var imgObj = new Image();
    imgObj.src = e.target.result;   //Successfully sets src
    imgObj.setAttribute("height", 200);
    imgObj.setAttribute("width", 400);
    ctx.drawImage(imgObj,0,0);  
}

【问题讨论】:

  • 你问错问题了。您想将图像绘制到给定尺寸的画布上,并使图像适合。这可以使用drawImage 方法的参数来完成:developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D/…
  • "但我无法设置宽度和高度的属性以适合我的 600x800 画布" 将图像 width 设置为 400 的目的是什么,@987654327 @ 到 200 如果 canvas width 设置为 600height 设置为 800 ?
  • @guest271314 只是任意数字。基本上只是意味着我希望画布内的图片比画布本身小。

标签: javascript jquery


【解决方案1】:

在这里,您正在设置图像的 HTML 元素的 widthheight,这对图像数据没有影响。要在绘制时缩放图像,您可以在drawImage() 调用期间传递widthheight

ctx.drawImage(imgObj, 0, 0, 400, 200);

根据文档,drawImage() 接受以下任何一项:

void ctx.drawImage(image, dx, dy);
void ctx.drawImage(image, dx, dy, dWidth, dHeight);
void ctx.drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);

这里,所有以s 为前缀的参数都引用了source 图像,所有以d 为前缀的参数都引用了将放置图像的位置,即destination

【讨论】:

  • 这有帮助。谢谢。还使用了@zero298 建议的How to scale an imageData in HTML canvas? 中的最后一个建议。
  • 9 个参数是荒谬的。谁能不看就快速说出第七个名字?
  • 一旦掌握了窍门,就不难了。它只是图像、源维度、目标维度。当传播运算符被广泛实施(已经在某些浏览器中,如 Chrome 中)时,它会变得更加容易。如果您已经有一个用于源和目标的 4 长度数组,则可以编写 ctx.drawImage(image, ...src, ...dst)。如果你没有这些数组,你也可以像ctx.drawImage(image, ...[0, 0, 200, 400], ...[0, 0, 100, 500]) 这样将它们组合在一起。那么对于那些难以数到 9 的人来说,这很容易。
猜你喜欢
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
相关资源
最近更新 更多