【发布时间】:2014-11-26 15:34:05
【问题描述】:
我有一个图像,我想在它上面画一些正方形。但我在getContext('2d') 上不断收到未定义的函数。我必须补充一点,var img 是一个已经加载到页面上的图像,我试图将其解释为画布,因为我正在使用另一个脚本,它可以选择图像上的区域,如果我使用画布,脚本不管用。那么在我无法将图像解释为画布的情况下,您有什么建议?
js函数
function drawInput(dx1,dy1,dx2,dy2) {
var img = document.getElementById('home:tempImg');
var canvas = img;
console.log(canvas);
var context = canvas.getContext('2d');
var imageObj = new Image();
imageObj.onload = function() {
context.drawImage(imageObj, dx1, dy1,dx2-dx1,dy2-dy1);
};
imageObj.src = 'images/selected.png';
}
HTML
<h:body>
<h:form onsubmit="#{getComponents.getAllComponents()}" id="home">
<div>
<p:graphicImage id="tempImg" rendered="true" value="#{imageView.selectedImg}">
</p:graphicImage>
</div>
</h:form>
</h:body>
<script type="text/javascript">
var myJSONStr ='{ "area" : #{areaInputView.areaListString}}';
console.log(myJSONStr);
var json = JSON.parse(myJSONStr);
//console.log(json.area[1].x1);
for(var i=0;myJSONStr.length >i ; i++) {
console.log(json.area[i].x1, json.area[i].y1, json.area[i].x2, json.area[i].y2);
drawInput(json.area[i].x1, json.area[i].y1, json.area[i].x2, json.area[i].y2);
};
</script>
</html>
【问题讨论】:
-
我认为您将不得不完全想出一种新方法。 AFAIK 你不能使用
img作为canvas。您可以做的是在画布内绘制图像。它会做更多的工作,你必须找到一种在脚本中访问#{imageView.selectedImg}的方法;但它绝对有可能。我建议重新考虑您的方法。 -
嘿乔丹,感谢您的回复。您是否无法考虑图像的尺寸并在其上绘制另一个图像,但要在第一个图像尺寸的边界内?
-
你绝对可以做到这一点——我不确定怎么做,但是看看 HTMLImageElement 和 Canvas.drawImage 周围的 MDN 文档。捕获对原始图像的引用,并将其属性用作边界。如果我今天有时间,我会试着为你举个例子。
-
谢谢,您不必这样做,但如果您愿意,请继续。感谢您的提示! :)
标签: javascript jquery html jsf canvas