Precisei trabalhar novamente com WebCam e Câmera dos Smartphone e Tablets, então segue como utilizar a Câmera do PC ou Celular com HTML5, com e sem Flash e fazer o Upload com PHP.
Baixe a Biblioteca acima, é algo muito simples, tira a foto, olha a prévia e faz o upload na fasta fotos/.
Código da index.html
<!doctype html> <html lang="pt"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Tutorial WebCam Blog Jonathas Guerra</title> <script type="text/javascript" src="webcamjs-master/webcam.min.js"></script> <script language="JavaScript"> function bater_foto() { Webcam.snap(function(data_uri) { document.getElementById('results').innerHTML = '<img id="base64image" src="'+data_uri+'"/><button onclick="salvar_foto();">Upload desta Foto</button>'; }); } function mostrar_camera() { Webcam.set({ width: 640, height: 480, dest_width: 640, dest_height: 480, crop_width: 300, crop_height: 400, image_format: 'jpeg', jpeg_quality: 100, flip_horiz: true }); Webcam.attach('#minha_camera'); } function salvar_foto() { document.getElementById("carregando").innerHTML="Salvando, aguarde..."; var file = document.getElementById("base64image").src; var formdata = new FormData(); formdata.append("base64image", file); var ajax = new XMLHttpRequest(); ajax.addEventListener("load", function(event) { upload_completo(event);}, false); ajax.open("POST", "upload.php"); ajax.send(formdata); } function upload_completo(event) { document.getElementById("carregando").innerHTML=""; var image_return=event.target.responseText; var showup=document.getElementById("completado").src=image_return; var showup2=document.getElementById("carregando").innerHTML='<b>Upload feito:</b>'; } window.onload= mostrar_camera; </script> <style type="text/css"> .container { float: left; width:320px; height: 480px; margin-right: 5px; padding: 5px; } #camera { background: #ff6666; height: 480px; } #previa { background: #ffc865; height: 480px; } #salva { background: #4dea02; height: 480px; } </style> </head> <body> <div class="container" id="camera"><b>Câmera:</b> <div id="minha_camera"></div><form><input type="button" value="Tirar Foto" onClick="bater_foto()"></form> </div> <div class="container" id="previa"> <b>Prévia:</b><div id="results"></div> </div> <div class="container" id="salva"> <span id="carregando"></span><img id="completado" src=""/> </div> </body> </htm>
O Código acima tem as funções javascript que faz cada etapa, acessa a Webcam ou Câmera do Celular, Bate a Foto e faz o Upload na pasta fotos/ usando o Arquivo abaixo:
Arquivo PHP para fazer o upload da imagem, upload.php
<?php define('UPLOAD_DIR', 'fotos/'); $img = $_POST['base64image']; $img = str_replace('data:image/jpeg;base64,', '', $img); $img = str_replace(' ', '+', $img); $data = base64_decode($img); $file = UPLOAD_DIR . uniqid() . '.jpg'; $success = file_put_contents($file, $data); print $success ? $file : 'Não é possível salvar o arquivo.'; ?>
Lembrando que para isso tudo funcionar direitinho, é preciso usar SSL (https://).
Se ta com preguiça de seguir o tutorial, segue o código 😉
O codigo roda bem no servidor, mas qd tento acessar pela rede, a camera nao pega.
Ta usando ssl? é necessário.
Gosto muito dessa dica era o que eu precisava,
Posso escolher a cemera traseira do celular, se sim como?
CÂMERA NÃO FUNCIONA EM MEU CELULAR
O que acontece exatamente?
Excelente Jonathas,
Como não sei fazer em PHP/Javascript …
Eu gostaria que antes de fazer o UPLOAD … fosse solicitado o nome da imagem …
Serviria para um sistema de cadastro de fotos de produtos aonde o usuário colocaria o codigo interno do produto e a foto gerada já seria salva com o nome sendo o código do produto cadastrado.
Ex.
7896443127168.JPG (codigo EAN de um barbeador, seria o nome da imagem)
Ótimas festas de fim de ano e MAIS sucesso pra ti em 2018 !!!
Jonathas,
muito obrigado pelo excelente script!
Ajudou muito!
Parabéns!
Boa tarde Jonathas, tem como acessar a câmera traseira do celular?
Sim, basta mudar na hora que abrir a câmera, o código abre qualquer uma das duas.
Desculpa minha ignorancia Jonathas, mas não me dá essa opção. Onde eu trocaria?
como usar o SSL ?? tem algum procedimento
Olá; É possível abrir a câmera traseira? Aonde devo fazer a alteração se possível?
Valeu
Valeu man!
Funcionou perfeitamente em localhost… Farei os testes no servidor de produção…
Obrigado!
Jonathas,
teria como fazer isso em arquivos PDF…
Pois tenho bastante relatórios a fazer fotográficos e gostaria de no corpo do PDF eu possa clicar no local escolhido e abrir a câmera traseira tirar a foto e logo se ajustar ao local escolhido.
Jonathas, o grande problema é funcionar no Safari,
não consigo resolver este erro utilizando o seu exemplo:
webcam.js error could not access webcam safari
Consegue me ajudar?
Jonathas, quando clico no “Upload desta foto” ele abre o “Salvando, aguarde…” e não sai dali, não faz o upload da foto nem nada!!!!
O que pode ser???
Olá Jonathas beleza? pra eu ativar a ssl como que faço? abraço
Me permita.
Sou novato e fui buscar informações sobre SSL após ver esse post do Jonathas.
Eu ativei o SSL de meu site junto ao meu administrador de domínio. Faça contato com seu administrador de domínio e terá seu SSL ativado.
Espero ter ajudado.
Boa tarde.
Joanthas,
Muito bom cara, gostei bastante. Porém estou tentando a todo custo, ativar minha câmera traseira, porem não estou me achando nem na documentação. Você pode me ajudar nisso?
Muito bom…
Gostaria de saber como tirar mais de uma foto e enviar todas, sem precisar buscar as fotos no armazenamento do celular.
alguma solução para tirar mais de uma fotos (tipo ir tirando as fotos) e depois de tirar “n” fotos enviar todas para php salvar?
usando a camera nativa.
Parabéns pelo script. Muito funcional. Mas funciona somente com SSL? para funcionar sem o SSL, o que preciso ?
olá.
Estou iniciando em jQuery e Ajax.
Como faço para salvar o nome da foto no momento do upload? Preciso adicionar a minha base de dados a um determinado registro.
EXCELENTE TÓPICO!
Obrigado!
Olá Jonathas, usei o seu exemplo e até quando eu tava usando no servidor local usando wampp tava funcionando normal. Quando eu coloquei no servidor da Hostgator está aparecendo um erro que não está reconhecendo a webcam. Vc poderia me ajudar? Obs: minha aplicação já está rodando com o HTTPS. Entrei em contato com o suporte e eles estão pedindo a porta/ range de porta e protocolo.
Muito bom! Seria possível obter o GPS do lugar que tirou a foto?
Armazenar a foto e o lugar/data que foi tirada?
Sim, é possível, mas muitas vezes a foto foi editada e alguns softwares/apps acabam zerando a localização.