【发布时间】:2017-12-03 20:02:21
【问题描述】:
我正在尝试在 HTML5 中获取 base64 版本的画布。
目前,我从画布上得到的 base64 图像是空白的。
我发现了类似的问题,例如这个:
HTML Canvas image to Base64 problem
但是,我遇到的问题是,因为我在画布中添加了 2 个图像,所以我不能使用这些答案中提供的示例,因为它们中的大多数都使用单个图像。
我知道在尝试获取 base64 图像之前,我必须等到画布图像正确加载。但我不知道我的情况如何。
这是我的代码:
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
context.canvas.width = 1000;
context.canvas.height = 1000;
var imageObj1 = new Image();
imageObj1.src = "http://www.offthegridnews.com/wp-content/uploads/2017/01/selfie-psuDOTedu.jpg";
imageObj1.onload = function() {
context.drawImage(imageObj1, 0, 180, canvas.width, canvas.height);
};
var imageObj2 = new Image();
imageObj2.src = "http://www.publicdomainpictures.net/pictures/150000/velka/banner-header-tapete-145002399028x.jpg"
imageObj2.onload = function() {
context.drawImage(imageObj2, 0, 0, canvas.width, 180);
};
// get png data url
//var pngUrl = canvas.toDataURL();
var pngUrl = canvas.toDataURL('image/png');
// get jpeg data url
var jpegUrl = canvas.toDataURL('image/jpeg');
$('#base').val(pngUrl);
<div class="contents" style="overflow-x:hidden; overflow-y:scroll;">
<div style="width:100%; height:90%;">
<canvas id="myCanvas" class="snap" style="width:100%; height:100%;" onclick="takephoto()"></canvas>
</div>
</div>
<p>
This is the base64 image
</p>
<textarea id="base">
</textarea>
这是一个有效的 FIDDLE:
https://jsfiddle.net/3p3e6Ldu/1/
有人可以就这个问题提出建议吗?
提前致谢。
编辑:
按照下面 cmets 的建议,我尝试使用计数器,当计数器达到特定数字时,我将画布转换为 base64。
【问题讨论】:
-
您可以在每次加载图像时使用计数器,当所有图像都加载完毕时,您可以执行代码以获取 base64 数据。
-
@MrZach,我试过了。但我不能让它工作:jsfiddle.net/3p3e6Ldu/3
-
示例中的
if( count == 2 )部分必须在onload回调中。你应该熟悉异步编码! -
@Sirko,我也试过了。它没有用。你试过你的建议了吗?
标签: javascript jquery html canvas