我使用Sketch.js (http://intridea.github.io/sketch.js/)创建一个简单的绘图画布。
当我试图将一个图像加载到画布中以参与绘图(在我的网站上用户绘图和保存,以及在一些thime可以回来编辑之后)时,我遇到了一个问题,但是我通过在redraw()函数中注释行redraw()函数来解决这个问题,就像我在其他问题(html5 canvas background image disappear on mousemove)上看到的那样,在Sketch.js文件中进行了注释。现在用户可以编辑他的绘图了。
问题是,在注释掉这一行之后,当我试图将标记的颜色设置为半透明(例如:rgba(0,0,0,0.1))时,它是不透明的(或者在绘制另一条线时转换为不透明)。
您可以在这里查看:https://jsfiddle.net/1fhuwdb9/4/
有人知道如何解决这个问题吗?谢谢大家非常感谢!
发布于 2016-07-28 10:01:06
当您绘制一些东西时,图像将由脚本重新绘制。因为您注释掉了这一行,旧的图像没有被清除,现在有许多堆叠的图像。脚本工作,您正在绘制透明的线条,但会出现许多层叠的层,因此透明变得几乎不透明。
您不需要注释该行就可以导入或保存草图的内容。在函数中,"this.actions“存储所有用户的移动。您应该只将其保存在数据库中,可能以json的形式保存,然后在开始时加载并调用绘图。
为了使它真正成为Sketch的一部分,我们将向草图脚本添加一些功能。
在Sketch.prototype.download之前,添加以下函数:
Sketch.prototype.export = function() {
$.post('yourfile.php', { data: JSON.stringify(this.actions) }, function (message_back) { alert(message_back); });
};它将所有操作转换为JSON,将POST转换为yourfile.php作为$_POST["data"],并在屏幕上警告您将在yourfile.php中打印的内容。在yourfile.php中,您应该将$_POST["data"]保存在数据库中的服务器o上。
现在,在if ($(this).attr('data-download')) {之前添加以下内容(在新添加的函数之前3-4行可以找到):
if ($(this).attr('data-export') != undefined) {
sketch.export();
}这将帮助您将导出简化为下载结果映像(如data-download,但data-export):
<a href="#the_id_of_canvas_here" data-export=''>Save your drawing.</a>现在,让我们构建导入功能:
在this.action = [];之后添加这些行(您可以在第48行找到它):
if ($(this.canvas).attr('data-actions') != undefined) {
// Load json and parse it
this.actions = JSON.parse($(this.canvas).attr('data-actions'));
// Redraw image by using the data
this.redraw();
}它从data-actions元素的canvas属性中获取数据,并从json中解析数据,在新映像的操作列表中添加操作,然后绘制图像。
现在,您只需将data-actions='HERE COMES THE JSON WHICH YOU SAVED ON THE SERVER ON DB'添加到画布中(例如:<canvas id="the_id_of_canvas_here" data-actions='HERE COMES THE JSON WHICH YOU SAVED ON THE SERVER ON DB' width="300" height="300"></canvas>)。
注意:当您将$_POST["data"]保存在文件或数据库中时,不要忘记对其进行消毒(https://stackoverflow.com/questions/6041741/fastest-way-to-check-if-a-string-is-json-in-php和https://stackoverflow.com/questions/37533162/sanitize-json-with-php)。
https://stackoverflow.com/questions/38629455
复制相似问题