我需要显示一个图像,在这个图像上方我需要放置 2 个 div,一个 div 包含图像,另一个 div 包含文本,并且需要将所有这三个组合起来以创建最终图像并将最终图像存储在数据库/服务器中,我正在使用画布来实现这一点,而我的项目是在 Ionic/AngularJS 中,我无法在没有 div 的情况下直接使用 img 和 text,因为我还需要拖放并调整这个 img 和文本的大小,而且这个不使用 div 是无法实现的。
这是我的html代码。
<div class="item item-image" ng-repeat="picture in product.images" id="mainwall">
<img ng-src="{{wallMainImage}}" ng-init="setInitSrc(picture.src)" width="330" height="400" crossOrigin="Anonymous" id="preview1" class="wall-image"/>
<div id="wall-design" draggable style="position: absolute;">
<img ng-src="{{walldesign}}" />
</div>
<div id="wall-text" draggable>
<p>{{wallText}}</p>
</div>
</div>
我最后将画布元素定义为
<canvas id="tempCanvas" style="position: relative;"></canvas>
在保存按钮单击的控制器中,我正在调用一个具有以下内容的函数。
var canvas = document.getElementById('tempCanvas');
var context = canvas.getContext('2d');
var source = document.getElementById("preview1");
var width = source.naturalWidth;
var height = source.naturalHeight;
canvas.width = width;
canvas.height = height;
var canvasDiv = document.getElementById('wall-design');
canvas.appendChild(canvasDiv);
console.log("canvas", canvas)
context.drawImage(source,0,0, width, height);
var dataURL = canvas.toDataURL("image/png");
$timeout( function(){
$scope.wallMainImage = dataURL;
if ($scope.$root.$$phase != '$apply' && $scope.$root.$$phase != '$digest') {
$scope.$apply();
}
}, 200);
我得到了一个我想要的精确画布控制台,如下所示
<canvas id="tempCanvas" style="position: relative;" width="700" height="519">
<div id="wall-design" draggable="" style="position: absolute; height: 153px; width: 54px; left: 128px; top: 105px;" class="ui-draggable ui-draggable-handle ui-resizable">
<img ng-src="images/designs/3.jpg" src="images/designs/3.jpg">
<div class="ui-resizable-handle ui-resizable-e" style="z-index: 90;"></div>
<div class="ui-resizable-handle ui-resizable-s" style="z-index: 90;"></div>
<div class="ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se" style="z-index: 90;"></div>
</div></canvas>
我还得到了一个非常长的编码字母的 datURL,最后我得到一个只有起始图像的图像和其他需要在此图像上方显示的图像未显示
请告诉我..我在哪里做错了
提前致谢..