Como acessar a câmera de um celular a partir de um aplicativo da web?


190

No meu aplicativo da Web (não aplicativo nativo) para celulares, quero tirar uma foto e enviá-la, mas não quero usar o Adobe Flash. Há alguma maneira de fazer isso?


2
"Página da Web" significa que ele deve ser facilmente acessado a partir de qualquer tipo de clientes / dispositivos. Então, devo definir restrições?
— 夏期劇場

1
Eu suponho que você deseja acessar a câmera de hardware, certo?
— precisa

Hmm .. "Câmera" dos telefones inteligentes móveis / etc .. da página da web.
— 夏期劇場

Olá, este é um assunto que estou estudando atualmente para meus próprios projetos. PWAs permitem que você use os recursos do dispositivo nativas em navegadores modernos: developers.google.com/web/updates/2016/12/imagecapture
— palmaone

Respostas:


260

No iPhone iOS6 e no Android ICS em diante, o HTML5 possui a seguinte tag, que permite tirar fotos do seu dispositivo:

 <input type="file" accept="image/*" capture="camera">

Capture pode levar valores como câmera, filmadora e áudio.

Acho que essa tag definitivamente não funcionará no iOS5, não tenho certeza.



2
GetUserMedia não é necessário aqui.
— precisa saber é o seguinte

Recebo um "getUserMedia () não suportado por este dispositivo" - mas estou no safari e tenho o ios7 - por quê? - Dan agora edit #
— Dan

10
Eu acho que talvez o código devesse ser <input type="file" accept="image/*;capture=camera">. De acordo com o MDN, não há captureatributo para um inputelemento.
— Kenny Evitt

9
Ambos capture="camera"(String) e os mais velhos accept="image/*;capture=camera"foram substituídos em 2012 com capture="capture"(Boolean). O atributo é usado para forçar a captura em vez de selecionar na biblioteca. Veja as especificações e a sintaxe correta para captura de mídia HTML
— Octavian Naicu

36

Hoje em dia, pelo menos com o Android, é relativamente fácil. Basta usar a etiqueta de entrada de arquivo normal e, quando o usuário clicar, o telefone perguntará se o usuário deseja usar a câmera (ou gerenciadores de arquivos etc.) para enviar um arquivo. Basta tirar uma foto com a câmera e ela será automaticamente adicionada e carregada.

Nenhuma idéia sobre o iphone. Talvez alguém possa esclarecer sobre isso. EDIT: Iphone funciona da mesma forma.

Amostra da tag de entrada:

<input type="file" accept="image/*" capture="camera">

você pode fazer isso por vários arquivos como: múltiplas = "múltiplos"
— parseguy

exemplo: <input type = "file" accept = "image / *" multiple = "multiple" capture = "camera">
— parseguy

multiplefunciona tanto no Android quanto no iOS, consulte Sintaxe correta para captura de mídia HTML
— Octavian Naicu

Não tenho certeza para outro dispositivo da Apple, pelo menos esta solução também funciona no iPad agora.
— cytsunny

29

Apenas para atualizar isso, o padrão agora é:

<input type="file" name="image" accept="image/*" capture="environment">

para acessar a câmera (traseira) voltada para o ambiente e

<input type="file" name="image" accept="image/*" capture="user">

para câmera voltada para o usuário (frontal). Para acessar o vídeo, substitua "video" por "image" no nome.

Testado no iPhone 5c, executando o iOS 10.3.3, firmware 760, funciona bem.

https://www.w3.org/TR/html-media-capture/


23

O Safari & Chrome no iOS 6+ e Android 2.2+ suportam o HTML Media Capture, que permite tirar fotos com a câmera do dispositivo ou selecionar uma existente:

<input type="file" accept="image/*">

Veja como funciona no iOS 10:

insira a descrição da imagem aqui

O Android 3.0+ e o Safari no iOS10.3 + também suportam o captureatributo usado para pular diretamente para a câmera.

<input type="file" accept="image/*" capture>

capture="camera"(String) e accept="image/*;capture=camera"(Parameter) faziam parte de especificações antigas e foram substituídos por capture(Boolean) a Recomendação do candidato do W3C.

Documentação de suporte: este livro O'Reilly de 2013 e meus testes


Mina no Android apenas salta direto para selecionar fotos, mas não me dar a opção para a câmera, mesmo quando eu puser capture = "câmera" .... totalmente preso
— Benyaman

@ Benyaman Tente com em capturevez de capture="camera". Curioso que dispositivo e versão do Android.
— Otaviano Naicu

Aparentemente, no Android 5.0, aparentemente, o Phonegap não possui captura de HTML incorporada. Portanto, ele não pode capturar coisas, nem gravação de vídeo, áudio ou câmera. Eu tive que construir uma solução alternativa.
— precisa saber é o seguinte

5

bem, há novos recursos HTML5 para acessar a câmera do dispositivo nativo - "getUserMedia API"

NOTA: O HTML5 pode lidar com a captura de fotos de uma página da Web em dispositivos Android (pelo menos nas versões mais recentes, executadas pelo Honeycomb OS; mas não nos iPhones, mas no iOS 6).


oh desculpe é chamada setUserMedia API
— Louis


4

O SDK do AppMobi HTML5 prometeu o acesso à funcionalidade nativa do dispositivo - incluindo a câmera - a partir de um aplicativo baseado em HTML5, mas não é mais propriedade do Google. Em vez disso, tente as respostas baseadas em HTML5 nesta postagem .


1
Não acredito que o Google possua propriedade sobre o AppMobi ou seus produtos.
— Fakeguybrushthreepwood 30/11/12

Ah - meu erro, porque está na loja virtual do Chrome - a referência do Google foi removida. Aqui estão os verdadeiros parceiros: appmobi.com/?page_id=468
— Dave Everitt


1

Observe que foram implementados recursos de segurança que exigem que o aplicativo seja executado localmente no host local ou por meio do SSL para que GetUserMedia () funcione.

Descobri isso ao tentar várias das demos disponíveis e fiquei desapontado quando não funcionaram! Consulte: Novas restrições de segurança


0

Acho que você não pode - existe uma API de rascunho do W3C para obter áudio ou vídeo, mas ainda não há implementação em nenhum dos principais sistemas operacionais móveis.

Segundo melhor A única opção é seguir a sugestão de Dennis de usar o PhoneGap. Isso significa que você precisa criar um aplicativo nativo e adicioná-lo à loja / mercado de aplicativos para dispositivos móveis.


desculpe repost - eu estava olhando para ver se você contornou a exceção NPE com o cliente jersey no android. preso :(
— necromante

0

Não conheço nenhuma maneira de acessar a câmera de um telefone celular a partir do navegador da Web sem algum mecanismo adicional (por exemplo, Flash ou algum tipo de contêiner que permita o acesso à API do hardware)

Para este último, consulte PhoneGap: http://docs.phonegap.com/phonegap_camera_camera.md.html

Com isso, você poderá acessar a câmera pelo menos em dispositivos baseados em iOS e Android.


4
Isso ainda exige que um aplicativo seja instalado no dispositivo móvel, o que eu acho que o OP quer evitar.
— precisa

@MichaelPetrotta você conhece uma maneira melhor?
— precisa

2
Não acredito que seja possível o que o OP está pedindo.
— Michael Petrotta

@MichaelPetrotta é o que eu acho também. E a melhor maneira de pensar seria no PhoneGap, pois funciona no iOS (o que o Flash não). Ainda assim, é nativo, é verdade, mas permite pelo menos um pouco de acesso entre plataformas às câmeras a partir de uma página da web.
— precisa
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.