Javascript+PHP实现在线拍照功能
原创文章 作者:月光光 2012年06月28日 13:12helloweba.com 标签:JavaScript PHP 在线拍照
我们在一些WEB应用中可能会遇到这样的情况,用户需要自己现场拍照并上传到会员系统。比如驾校采集指纹拍照流程、考试现场采集照片等。我们今天要讲的是如何使用javascript和PHP实现一个简单的在线拍照并上传的功能。
实现这个功能的前提是你的电脑设备上需要安装有摄像头设备,以及你的浏览器需要支持flash。
HTML
<!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()">
</div>
<div id="results">
<!--显示上传结果-->
</div>
</body>
</html>
在body中加入一个用于调用摄像组件的容器id#cam和一个显示上传信息的容器id#results。
Javascript
接下来调用摄像组件,我们先载入webcam.js,用于拍照和上传的js库。
<script type="text/javascript" src="webcam.js"></script>
然后在容器id#cam中,加入以下代码:
<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输出摄像组件,参数即宽度、高度、上传后宽度、上传后高度。
当点击按钮拍照时,需要执行以下代码:
<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";
本文只是简单的介绍了下在线拍照和上传功能,其实深入应用场景如上传后再裁剪,生成多张不同比例的图像等等,大家自己去琢磨吧。
共27条评论
我也是,是骗子吗? 为什么不行?有谁知道吗?发我邮箱一份,非常感谢,258864649@***.COM
为什么你这里预览能看,放我本地测试就不行,还少一个test.php
错误Movie is not loaded yet ,啥原因呀
请指教如何可自定文件名称
下了Javascript+PHP实现在线拍照功能
试验, 很棒的
可是想加个输入文件名称
按拍照时一起传到action.php
$filename = XXXXX'-'date('YmdHis') . '.jpg';
图存盘后, 格式无法辨识
请指教如何可自定文件名称
谢谢
下了试验, 很棒的
可是想加个输入文件名称
按拍照时一起传到action.php
$filename = XXXXX'-'date('YmdHis') . '.jpg';
图存盘后, 格式无法辨识
请指教如何可自定文件名称
谢谢
说的挺对的。
路过,赞一个
安装了flash但是还是出现Movie is not loaded yet问题
为什么我会报Movie is not loaded yet
如果有多个摄像头的话怎么去选择
你机器装有摄像头么?
***在吗?为什么我打开你们的测试DEMO页面是空白的呀。我到本地测试也是空白
***在吗?为什么我打开你们的测试DEMO页面是空白的呀。我到本地测试也是空白,有些人的不是空白。
有兼容问题,IE下拍出来的照片是空白
为什么上传图片会有错呢???
不能预览拍的照片是怎么回事啊?
能拍照,为什么不能显示缩略图呢?
错误Movie is not loaded yet ,啥原因呀
感觉非常好,但我只会ASP啊,请问ASP能实现吗?