本文介绍如何利用JavaScript库Webcam.js与PHP后端配合,实现在线调用摄像头并拍照上传的功能。文章详细说明了HTML容器的配置、JS库的引入及关键API设置,包括图像质量、快门声音等参数。同时提供了完整的PHP处理脚本,演示如何将前端获取的图片数据保存至服务器并返回访问路径,适用于需要现场采集照片的Web应用场景。
在线拍照功能概述
本文通过具体实例,详细讲解了基于PHP和JavaScript技术栈实现在线拍照功能的方法,供开发者参考借鉴。
在各类Web应用开发中,常需实现用户现场拍摄照片并上传至会员系统的功能,例如驾校指纹采集、考试现场照片录入等场景。本文将演示如何结合JavaScript与PHP,构建一个基础的在线拍照及上传模块。
环境要求与前置条件
实现该功能需满足两个前提条件:用户设备必须配备摄像头硬件,且所使用的浏览器需支持Flash插件(注:现代浏览器已逐步淘汰Flash,此处指代原文技术背景)。
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Javascript+PHP实现在线拍照功能</title>
</head>
<body>
<div id="cam">
<!--调用摄像组件并显示图像-->
<input type=button value="点击这里拍照" class="btn" onclick="take_snapshot()">
http://siteweb.com/sitemaps.xml
</div>
<div id="results">
<!--显示上传结果-->
</div>
</body>
</html>
HTML容器与JS库引入
在HTML的body标签内,需定义两个容器:id为#cam的容器用于承载摄像组件,id为#results的容器用于显示上传状态或结果信息。随后,需引入webcam.js库,该库负责处理拍照及上传逻辑。
具体代码实现如下:
<script type="text/javascript" src="webcam.js"></script> 摄像组件初始化配置
在id为#cam的容器内部,需添加以下JavaScript代码以初始化摄像组件:
<script language="JavaScript">
webcam.set_api_url( 'action.php' );
webcam.set_quality( 90 ); // 图像质量(1 - 100)
webcam.set_shutter_sound( true ); // 拍照时播放声音
document.write( webcam.get_html(320, 240, 160,120) );
</script>
上述代码调用了webcam对象,其中webcam.set_api_url用于指定处理图像上传的PHP接口路径;set_quality方法用于设定图像压缩质量;set_shutter_sound控制拍照时是否播放快门音效;get_html方法则用于输出摄像组件的HTML代码,其参数依次指定预览窗口宽度、高度以及上传后图片的宽度和高度。
<script language="JavaScript">
webcam.set_hook( 'onComplete', 'my_completion_handler' );
function take_snapshot() {
document.getElementById('results').innerHTML = '<h4>Uploading...</h4>';
webcam.snap();
}
function my_completion_handler(msg) {
if (msg.match(/(http\:\/\/\S+)\/)) {
var image_url = RegExp.$1;
document.getElementById('results').innerHTML =
'<h4>Upload Successful!</h4>' +
'<img src="' + image_url + '">';
webcam.reset();
}
else alert("PHP Error: " + msg);
}
</script>
拍照交互与后端处理
当执行拍照动作时,代码与后台php交互,如果上传图片完成后,则返回相应的信息。 PHP action.php所做的就是将本地拍照的图像上传到服务器,并将图片路径返回给前端。注意存放图片的路径要给写权限。
$filename = date('YmdHis') . '.jpg';
$result = file_put_contents( 'pics/'.$filename, file_get_contents('php://input') );
if (!$result) {
print "ERROR: Failed to write data to $filename, check permissions\n";
exit();
}
$url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['REQUEST_URI']) . '/pics/' . $filename;
print "$url\n";
$filename = date('YmdHis') . '.jpg'; $result = file_put_contents( 'pics/'.$filename, file_get_contents('php://input') ); if (!$result) { print "ERROR: Failed to write data to $filename, check permissions\n"; exit(); } $url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['REQUEST_URI']) . '/pics/' . $filename; print "$url\n";
本文仅简要介绍了在线拍照与上传的基本实现。在实际复杂场景中,可能涉及上传后的图片裁剪、生成多种比例缩略图等功能,开发者可根据具体需求进行扩展开发。