javascript - drawImage 在 Canvas 上绘制图像,但在任何事件之后它都会消失图像 fabricjs

标签 javascript jquery canvas fabricjs

我正在通过 drawImage 方法在 Canvas 上绘制图像,它绘制了图像,但是当调用任何事件时,图像变为空白并消失。我尝试了不同的方法但没有成功。我想在 Canvas 上显示图像而不是消失,因为我将这个 Canvas 转换为变成空白的 dataUrl。

My working Link

请任何知道的人指导我哪里出错了。 下面是我的代码。

<!DOCTYPE html>
<html>
<head>
<title>Canvas.dataURL tainted(polluted) Issue</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<script src="https://technology-architects.com/daulat/customizer_assets/js/bootstrap-slider.js"></script> 
<script type="text/javascript" src="https://technology-architects.com/daulat/customizer_assets/js/jquery.liteuploader.js"></script> 
<script type="text/javascript" src="https://files.codepedia.info/files/uploads/iScripts/html2canvas.js"></script> 
<script type="text/javascript" src="https://technology-architects.com/daulat/customizer_assets/js/custom.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.5.0/fabric.min.js"></script> 
<script src="https://technology-architects.com/daulat/customizer_assets/cartjs/cart.js"></script> 
<script src="https://technology-architects.com/daulat/customizer_assets/fabric-js/custom/fabricExtensions.js"></script> 
<script type="text/javascript" src="https://technology-architects.com/daulat/customizer_assets/bgrins-spectrum/spectrum.js"></script>
<script type="text/javascript" src="https://technology-architects.com/daulat/customizer_assets/js/fabric.curvedText.js"></script>


</head>
<body>

<style>
.canvas-container{display:inline-block;vertical-align:middle;}
</style>

<canvas id="canvas" height=758 width=497 style="border:1px solid lightgrey;display:inline-block;"></canvas>

<img id="curveImg" src="http://production.technology-architects.com/doulat/curtains_new/3d_view/images/sample.png" alt="" style="display:inline-block;vertical-align:middle;">
<button type="button" id="clickme">Click Me!</button>

<script>

  var canvas = new fabric.Canvas('canvas');

  var offsetY=[0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,29.5,30,30.1,30.2,30.3,30.4,30.5,30.6,30.7,30.8,30.9,30,29.5,29,28,27,26,25,24,23,22,21,20,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0.9,0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1,0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,29.5,30,30.1,30.2,30.3,30.4,30.5,30.6,30.7,30.8,30.9,30,29.5,29,28,27,26,25,24,23,22,21,20,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0.9,0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1,0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,29.5,30,30.1,30.2,30.3,30.4,30.5,30.6,30.7,30.8,30.9,30,29.5,29,28,27,26,25,24,23,22,21,20,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0.9,0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1,0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,29.5,30,30.1,30.2,30.3,30.4,30.5,30.6,30.7,30.8,30.9,30,29.5,29,28,27,26,25,24,23,22,21,20,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0.9,0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1,0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,29.5,30,30.1,30.2,30.3,30.4,30.5,30.6,30.7,30.8,30.9,30,29.5,29,28,27,26,25,24,23,22,21,20,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0.9,0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1,0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,29.5,30,30.1,30.2,30.3,30.4,30.5,30.6,30.7,30.8,30.9,30,29.5,29,28,27,26,25,24,23,22,21,20,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0.9,0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1,0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,29.5,30,30.1,30.2,30.3,30.4,30.5,30.6,30.7,30.8,30.9,30,29.5,29,28,27,26,25,24,23,22,21,20,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0.9,0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1,0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,29.5,30,30.1,30.2,30.3,30.4,30.5,30.6,30.7,30.8,30.9,30,29.5,29,28,27,26,25,24,23,22,21,20,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0.9,0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1,0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,29.5,30,30.1,30.2,30.3,30.4,30.5,30.6,30.7,30.8,30.9,30,29.5,29,28,27,26,25,24,23,22,21,20,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0.9,0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1,0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,29.5,30,30.1,30.2,30.3,30.4,30.5,30.6,30.7,30.8,30.9,30,29.5,29,28,27,26,25,24,23,22,21,20,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0.9,0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1,0]
  
  var ctx = canvas.getContext("2d");
  var immg = 'http://production.technology-architects.com/doulat/curtains_new/3d_view/images/sample.png';
  
      fabric.util.loadImage(immg, function(img) {
        
          for(var x=0;x<offsetY.length;x++){
            ctx.drawImage(img,
                // clip 1 pixel wide slice from the image
                x,0,1,img.height,
                // draw that slice with a y-offset
                x,offsetY[x],1,img.height
            );           
          }

 
    },null, {crossOrigin:'anonymous'}); 
	canvas.renderAll();
	
	
	
	
	$(document).on('click','#clickme',function(){
	var imagedatafinal = canvas.toDataURL('image/png');
	console.log(imagedatafinal);
	$('#curveImg').attr('src',imagedatafinal);
	var imgdatafinal = imagedatafinal.replace(/^data:image\/(png|jpg);base64,/, "");
				  //ajax call to save image inside folder
				  $.ajax({
					url: '../save_image.php',
					data: {
						 imgdata:imgdatafinal
						 },
					type: 'post',
					success: function (response) {
					$('#curveImg').attr('src',response);
					console.log(response);
					}
				  });
	});
	
 </script>
</body>
</html>

最佳答案

检查这个Fiddle .

你遇到这个问题是因为你是在上下文中绘制的,而不是将它添加到 Canvas 对象中。因此,在上下文中绘制之后,您可以使用 ctx.getImageData(0, 0, img.width, img.height); 获取上下文数据,然后创建一个 Canvas 元素并将该图像数据放入c .getContext('2d').putImageData(data, 0, 0); 然后从该 Canvas 图像数据创建一个 fabricjs 图像对象。

*Crossorigin 问题是否存在,因此 fiddle 无法正常工作,您可以在 local server 中查看

关于javascript - drawImage 在 Canvas 上绘制图像,但在任何事件之后它都会消失图像 fabricjs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45326211/

相关文章:

javascript - 如何在屏幕上滚动时使用移动触摸在 Canvas 上绘制控件

HTML5 Canvas : Why does measuring text with measureText and offsetWidth() give different values?

javascript - 为什么循环后的代码在循环内 dom 更改之前执行?

Javascript+Python : sending array to Python script, 将结果返回给 Javascript

javascript - Jquery:有没有办法识别元素的唯一性?

javascript - 使用替代 id 和名称以 PHP 形式生成附加行

jquery - 如何根据父元素设置元素的位置

javascript - 如何使用css格式的Iconsax图标

javascript - HTML5 音频标签无法在移动设备上引发事件 `canplay`

javascript - KineticJS - 将舞台缩放到视口(viewport)