【发布时间】:2017-09-04 23:54:55
【问题描述】:
我目前正在尝试在 Laserfiche 表单中执行一些 Javascript 工作,这需要我将图像的 base64 数据保存在单独的文本区域中,并将该数据反馈到图像中以允许将画布变成我可以保存到系统中的图像。
问题是我试图有一个用户可以在其中绘制的背景图像(在这种情况下,他们可以在车辆上画一个圆圈来指示损坏的位置)。我正在使用sketch.js 来允许任务的绘图部分。
据我所知,背景 CSS 无法保存到画布中。很好,但是当我已经获取 base64 数据并将其传递回我的画布时,如何传递背景图像?
saveimage 类属于文本区域,imagefinish 属于它们在图像准备好时标记的复选框
html
<div class="demo" id="colors_demo">
<div class="tools">
<a href="#colors_sketch" data-tool="marker">Marker</a>
<a href="#colors_sketch" data-tool="eraser">Eraser</a>
<a href="#colors_sketch" data-download="png" style="float: right; width: 100px;">Download</a>
</div>
<canvas id="colors_sketch" width="750" height="500" style="border:2px solid #000000 ; background: url(http://localhost/forms/img/vanImage.jpg"></canvas>
</div>
<input name="Field11" id="Field11-0" type="checkbox" value="isLocked" vo="e" data-parsley-class-handler="#Field11" data-parsley-errors-container="#Field11" data-parsley-multiple="Field11">
<textarea id="Field13" name="Field13" aria-labelledby="Field13" class="cf-medium" rows="3" vo="e" data-parsley-id="28"></textarea>
Javascript
//submitted form
if ($('[name=IsLocked]').val() == 'True') {
var myCanvas = document.getElementById('colors_sketch');
var ctx = myCanvas.getContext('2d');
var img = new Image;
img.onload = function() {
ctx.drawImage(this, 0, 0, myCanvas.width, myCanvas.height);
}
img.src = $('.saveimage .cf-field').text();
}
else {
//fill form
//$.getScript('http://localhost/Forms/js/sketch.js', function() {
$.getScript('https://rawgit.com/intridea/sketch.js/gh-pages/lib/sketch.js', function() {
//script is loaded and executed put your dependent JS here
$.each(['#f00', '#ff0', '#0f0', '#0ff', '#00f', '#f0f', '#000', '#fff'], function() {
$('#colors_demo .tools').append("<a href='#colors_sketch' data-color='" + this + "' style='width: 10px; background: " + this + ";'></a> ");
});
$.each([3, 5, 10, 15], function() {
$('#colors_demo .tools').append("<a href='#colors_sketch' data-size='" + this + "' style='background: #ccc'>" + this + "</a> ");
});
//$('#colors_sketch').sketch();
$('#colors_sketch').sketch({defaultColor: "#000"});
});
$('.imagefinish input').change(function(){
if(this.checked) {
var myCanvas = document.getElementById('colors_sketch');
$('.saveimage textarea').val(myCanvas.toDataURL());
}
});
}
我可以通过为我的图像路径添加一个变量来添加图像
var image = 'http://localhost/forms/img/vanImage.jpg'
我还将这两行添加到我的 onload 中,用于“myCanvas”的样式。我有一种感觉,这个解决方案只会起作用,因为 Laserfiches 表格软件的工作原理,但标记的答案也是正确的。
img.onload = function() {
ctx.drawImage(this, 0, 0, myCanvas.width, myCanvas.height);
myCanvas.style.backgroundRepeat = "no-repeat";
myCanvas.style.backgroundImage = 'url('+image+')'
}
img.src = $('.saveimage .cf-field').text();
}
【问题讨论】:
标签: javascript html canvas sketchjs