2016-06-29 45 views
7

Ho letto molti modi per acquisire un'immagine da una pagina html5. Sono ancora sicuri di quale è la migliore per le mie esigenze:Scatta una foto da html5

  • ampio supporto per i browser e sistema operativo: almeno: Chrome, Firefox, di default Android, safari
  • Non ho bisogno di acquisizione in tempo reale. L'utente deve premere un pulsante per scattare una foto, che richiede l'applicazione della fotocamera del sistema

Ci sono almeno tre soluzioni:

  • <input type="file" accept="image/*;capture=camera">
  • Navigator.getUserMedia() (sembra deprecato)
  • MediaDevices.getUserMedia() (sembra sperimentale)

In ogni caso, vedo un sacco di examp per incorporare la fotocamera nella pagina (w/ getUserMedia), quindi non so se posso fare affidamento solo sul primo metodo.

+2

getUserMedia non è deprecato, ha appena cambiato il nome in 'navigator.mediaDevices.getUserMedia'. Se vuoi scattare foto ad alta risoluzione su un telefono, vai con # 1, poiché 'getUserMedia' è limitato alla risoluzione video atm. – jib

+0

Ok, grazie. Sono stato confuso da questo link: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/getUserMedia Non ho capito ha appena cambiato il nome ma è la stessa classe! – Mark

+0

Restituisce una promessa piuttosto che ottenere il successo e callback non riusciti, ma per il resto è la stessa cosa. – jib

risposta

8

Utilizzando l'API WebRTC getUserMedia sta andando a coprire tutti i browser moderni oltre a Safari: http://caniuse.com/#feat=stream

Here è una pagina di esempio che utilizza getUserMedia di prendere un fermo immagine (con un link ad una page che descrive il codice). La maggior parte delle demo getUserMedia mostra il flusso video in un'area di area visibile, ma non è necessario. È possibile acquisire un'immagine utilizzando getUserMedia senza visualizzare il flusso video in un'area visibile.

Sfortunatamente, Apple è stata lenta nell'adottare le API WebRTC, quindi penso che il tag di input del file sia il migliore che si possa sperare lì, a meno che non si desideri utilizzare qualcosa come Cordova. Here è una descrizione di come utilizzare il tag di input del file.

Il Media Capture API è un suggerimento candidato che significa che sta per diventare uno standard, tuttavia, non conosco alcun browser che implementa l'attuale raccomandazione W3C (utilizzando un attributo di acquisizione nuda nel tag di input). Lo stile <input type="file" accept="image/*"> attualmente sembra essere supportato solo dai browser mobili.

In breve, se si desidera disporre di un ampio supporto per browser nel prossimo futuro, sarà necessario supportare entrambi i metodi fino a quando Apple inizia a supportare le API WebRTC o finché altri browser desktop non iniziano a supportare l'API Media Capture (o la variante con l'attributo capture attualmente supportato dai browser mobili).

+0

Per quanto ne so, getUserMedia API consente di incorporare l'output della telecamera nella pagina web. Perché non ho bisogno di incorporare nulla ma solo di acquisire ed elaborare (in background) un'immagine fissa, penso che il primo metodo sia ancora migliore. – Mark

+0

@ Marco ho aggiornato la mia risposta. Se desideri un ampio supporto per i browser nel prossimo futuro, sfortunatamente, probabilmente dovrai supportare entrambi i metodi.A meno che il tuo uso non sia solo mobile, nel qual caso il metodo del tag di input potrebbe essere sufficiente (anche se potrebbe cambiare leggermente ad un certo punto, data la raccomandazione del W3C). Ho anche notato nel mio aggiornamento che getUserMedia non ha bisogno di mostrare il video dal vivo. La maggior parte delle demo lo mostrano perché è più interessante in questo modo per scopi dimostrativi. – kanaka

+0

Ok, anche se il mio utilizzo è solo per dispositivi mobili, vale la pena di sapere che getUserMedia non richiede di mostrare il video dal vivo. – Mark