Opa… Utilizo duas blasnks… Uma capturo a imagem e a outra salvo a imagem…
Segue código:
bl_capturar_img.php:
$var_id_pessoa = [glo_id_pessoa_foto];
?>
Câmera
<!--OpenType-->
<meta property="og:locale" content="pt_BR" />
<meta property="og:type" content="website" />
<meta property="og:title" content="" />
<meta property="og:description" content="" />
<meta property="og:url" content="" />
<meta property="og:site_name" content="" />
<!--CSS-->
<style>
body{
font-family: sans-serif;
margin: 0;
}
.area{
margin: 10px auto;
box-shadow: 0 10px 100px #ccc;
padding: 20px;
box-sizing: border-box;
max-width: 500px;
}
.area video{
width: 100%;
height: auto;
background-color: whitesmoke;
}
.area textarea{
width: 100%;
margin-top: 10px;
height: 80px;
box-sizing: border-box;
}
.area button{
-webkit-appearance: none;
width: 100%;
box-sizing: border-box;
padding: 10px;
text-align: center;
background-color: #068c84;
color: white;
text-transform: uppercase;
border: 1px solid white;
box-shadow: 0 1px 5px #666;
}
.area button:focus{
outline: none;
background-color: #0989b0;
}
.area img{
max-width: 100%;
height: auto;
}
.area .caminho-imagem{
padding: 5px 10px;
border-radius: 3px;
background-color: #068c84;
text-align: center;
}
.area .caminho-imagem a{
color: white;
text-decoration: none;
}
.area .caminho-imagem a:hover{
color: yellow;
}
</style>
</head>
<body>
<div class="area">
<video autoplay="true" id="webCamera">
</video>
<form target="POST">
<textarea type="text" style="display:none;" id="base_img" name="base_img"></textarea>
<button type="button" onclick="takeSnapShot()">Tirar foto e salvar</button>
<input type="text" name="nome_foto" id="input_nome_foto" style="padding: 8px 5px; font-size: 16px; min-width: 300px; width: 100%; margin-top: 10px; box-sizing: border-box;" placeholder="Título da foto" autofocus="true">
</form>
<img id="imagemConvertida"/>
<p id="caminhoImagem" class="caminho-imagem"><a href="" target="_blank"></a></p>
<!--Scripts-->
<script>
function loadCamera() {
//Captura elemento de vídeo
var video = document.querySelector("#webCamera");
//As opções abaixo são necessárias para o funcionamento correto no iOS
video.setAttribute('autoplay', '');
video.setAttribute('muted', '');
video.setAttribute('playsinline', '');
//--
//Verifica se o navegador pode capturar mídia
if (navigator.mediaDevices.getUserMedia) {
navigator.mediaDevices.getUserMedia({audio: false, video: {
//facingMode: { facingMode: 'user' }, // camera frontal (webcam)
facingMode: { exact: "environment" }, // camera traseira
height: { ideal: 720 }
}})
.then( function(stream) {
//Definir o elemento víde a carregar o capturado pela webcam
video.srcObject = stream;
})
.catch(function(error) {
alert("Oooopps... Falhou :'(");
console.log(error);
});
}
}
function takeSnapShot(){
//Captura elemento de vídeo
var video = document.querySelector("#webCamera");
//Criando um canvas que vai guardar a imagem temporariamente
var canvas = document.createElement('canvas');
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
var ctx = canvas.getContext('2d');
//Desnehando e convertendo as minensões
ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
//Criando o JPG
var dataURI = canvas.toDataURL('image/jpeg'); //O resultado é um BASE64 de uma imagem.
document.querySelector("#base_img").value = dataURI;
sendSnapShot(dataURI); //Gerar Imagem e Salvar Caminho no Banco
}
function sendSnapShot(base64) {
var request = new XMLHttpRequest();
request.open('POST', '../salvar_img/salvar_img.php', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
request.onload = function() {
console.log(request);
if (request.status >= 200 && request.status < 400) {
//Colocar o caminho da imagem no SRC
var data = JSON.parse(request.responseText);
//verificar se houve erro
if(data.error){
alert(data.error);
return false;
}
//Mostrar informações
document.querySelector("#imagemConvertida").setAttribute("src", data.img);
document.querySelector("#caminhoImagem a").setAttribute("href", data.img);
document.querySelector("#caminhoImagem a").innerHTML = data.img.split("/")[1];
} else {
alert( "Erro ao salvar. Tipo:" + request.status );
}
};
request.onerror = function() {
alert("Erro ao salvar. Back-End inacessível.");
}
var nome_img = document.getElementById('input_nome_foto').value;
request.send("base_img="+base64+"&nome_img="+nome_img); // Enviar dados
document.location.replace( "../Cons_Pessoas/Cons_Pessoas.php" );
}
loadCamera();
</script>
</div>
</body>
<?php
salvar_img.php:
$var_id_pessoa = [glo_id_pessoa_foto];
$var_ip = PegaIp();
$var_data_hora = date('Y-m-d H:i:s');;
if(!isset($_POST['base_img'])) {
die("{\"error\": \" Flopou. Cadê o base_img?\"}");
}
$nome_imagem = $_POST['nome_img'];
$pasta_img = $this->Ini->path_doc. [nidcliente] . '/doctos_camera/';
mkdir($pasta_img);
$result = [];
$data = str_replace(" ","+",$_POST['base_img']); //O envio do dado pelo XMLHttpRequest tende
//O envio do dado pelo XMLHttpRequest tende a trocar o + por espaço, por isso a necessidade de substituir. $data = str_replace(" ", "+" ,$_POST['base_img']);
$name = "arq_".[nidcliente] ."_" . $var_id_pessoa . '_' . md5(time().uniqid());
$path = $pasta_img."{$name}.jpg";
//data
$data = explode(',', $data);
//Save data
file_put_contents($path, base64_decode(trim($data[1])));
//Print Data
$result['img'] = $path;
echo json_encode($result, JSON_PRETTY_PRINT);
//salva no banco de dados
$sql = "insert
into tbl_cadastrodepessoas_docs
( ccodigopessoa,
ddatainc,
niduser,
cip,
cnomearq,
cdescricao)
values( $var_id_pessoa,
'$var_data_hora',
[niduser] ,
'$var_ip',
'$name',
'$nome_imagem')";
sc_exec_sql ( $sql );