【发布时间】:2019-10-18 13:58:22
【问题描述】:
我正在开发一个 django 应用程序,用户可以在其中触发网络摄像头并拍摄照片。这张照片保存在画布中。我想将此图像发送到 django 视图,通过它可以将图像保存在 django 服务器中。
我正在使用 webrtc 来触发网络摄像头。我很难用 js 本身保存数据,并在某处读到仅靠 js 是不可能的。所以我现在正在尝试使用 ajax 将数据发送到 python,但我不能。我是使用 canvas 和 ajax 的初学者,所以详细的解释会很有帮助。
我尝试使用这些答案,但似乎都没有帮助
Send canvas image data (Uint8ClampedArray) to Flask Server via Ajax
Can't send data back to Django from JS AJAX
这是我目前的代码
html 模板
<center>
<button type="button" name="button" class='btn btn-outline-dark btn-lg' id='start'>Start Video Capture</button>
<div class="container-fluid mt-2">
<video id="video" width="640" height="480" autoplay></video><br>
<button type="button" data-toggle="modal" data-target="#image_model" class="btn btn-lg btn-dark" id="snap">Snap Photo</button>
</div>
</center>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Retake</button>
<form action="{% url 'img_submit' %}" method="post" class="image_submit_form">
{% csrf_token %}
<input type="submit" value="Use Image" class="btn btn-primary" id="use_image">
</form>
不确定use_image 是否需要表单才能将数据发送到 python。
javascript 代码
// Grab elements, create settings, etc.
var video = document.getElementById('video');
// Elements for taking the snapshot
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
document.getElementById('start').addEventListener("click", function() {
// Get access to the camera!
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
navigator.mediaDevices.getUserMedia({
video: true
}).then(function(stream) {
//video.src = window.URL.createObjectURL(stream);
video.srcObject = stream;
video.play();
});
}
$('#snap').fadeIn();
// Trigger photo take
document.getElementById("snap").addEventListener("click", function() {
context.drawImage(video, 0, 0, 640, 480);
var dataURL = canvas.toDataURL();
$("#use_image").click(function() {
let $form = $(".image_submit_form");
let form_data = new FormData($form[0]);
$.ajax({
url: $form.attr('action'),
type: $form.attr('method'),
dataType: 'json',
data: JSON.stringify(dataURL),
data: {
imageBase64: dataURL
}
}).done(function() {
console.log('sent');
});
});
});
});
我很确定我搞砸了 ajax 部分。
我仍然没有编写任何代码来使用 python 保存图像,但我想如果我能以某种方式将画布数据转换为 jpeg 或 png 然后将其发送到 python,那将很容易。我也不明白为什么我们必须将画布数据转换为 base64。我们不能将其转换为 png 吗?
请帮助我。 谢谢
[编辑1]
pythonviews.py
def img_submit(request):
url = request.POST.dict()
return HttpResponse(url)
【问题讨论】:
标签: javascript python ajax django