2016-06-29 18 views
7

Ich lese viele Möglichkeiten, um ein Bild von einer html5 Seite zu erhalten. Ich bin immer noch nicht sicher, was ist das Beste für meine Bedürfnisse:Machen Sie ein Bild von html5

  • breite Unterstützung für Browser und Betriebssystem: mindestens: Chrome, Firefox, android Standard, Safari
  • ich Echtzeiterfassung nicht brauchen. Der Benutzer muss eine Taste drücken, um ein Bild aufzunehmen, Anwendung der Systemkamera anfordernden

Es gibt mindestens drei Lösungen:

  • <input type="file" accept="image/*;capture=camera">
  • Navigator.getUserMedia() (es scheint veraltet)
  • MediaDevices.getUserMedia() (es scheint experimentell)

Wie auch immer, ich sehe viele Beispiele les, um die Kamera in die Seite (w/ getUserMedia) einzubetten, so weiß ich nicht, ob ich mich nur auf die erste Methode verlassen kann.

+2

getUserMedia ist nicht veraltet, es hat nur den Namen in 'navigator.mediaDevices.getUserMedia' geändert. Wenn Sie hochauflösende Fotos auf einem Telefon aufnehmen möchten, gehen Sie zu # 1, da "getUserMedia" auf Videoauflösung atm beschränkt ist. – jib

+0

Ok, danke. Ich war verwirrt von diesem Link: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/getUserMedia Ich habe es nicht verstanden, änderte nur den Namen, aber es ist die gleiche Klasse! – Mark

+0

Es gibt ein Versprechen zurück, anstatt Erfolgs- und Misserfolg-Rückrufe zu nehmen, aber ansonsten ist es dasselbe. – jib

Antwort

8

die WebRTC getUserMedia-API wird alle modernen Browser außer Safari decken: http://caniuse.com/#feat=stream

Here ist ein Beispiel-Seite, die getUserMedia ein Standbild nehmen verwendet (mit einem Link zu einem page den Code beschreibt). Die meisten getUserMedia-Demos zeigen den Video-Stream in einem sichtbaren Canvas-Bereich, aber das ist nicht erforderlich. Sie können ein Bild mit getUserMedia erfassen, ohne den Videostream in einer sichtbaren Arbeitsfläche anzuzeigen.

Leider war Apple langsam, WebRTC APIs zu adoptieren, also denke ich, dass das Dateieingabetag ungefähr das Beste ist, auf das Sie dort hoffen können, es sei denn Sie sind bereit, etwas wie Cordova zu verwenden. Here ist eine Beschreibung der Verwendung des Dateieingabe-Tags.

Die Media Capture API ist ein Kandidat Empfehlung, was bedeutet, es ist auf dem Weg einen Standard zu werden, aber ich weiß nicht von irgendwelchen Browsern, die die aktuelle W3C-Empfehlung (unter Verwendung eines bloßes Capture-Attributs in dem Input-Tag) implementieren. Der Stil <input type="file" accept="image/*"> wird derzeit anscheinend nur von mobilen Browsern unterstützt.

Zusammenfassend, wenn Sie in naher Zukunft eine breite Browserunterstützung haben möchten, müssen Sie beide Methoden unterstützen, bis Apple WebRTC APIs unterstützt oder bis andere Desktopbrowser die Media Capture API (oder die Variante) unterstützen mit dem Capture-Attribut, das derzeit von mobilen Browsern unterstützt wird).

+0

Soweit ich verstehe getUserMedia API ermöglicht es, die Kamera-Ausgabe in die Webseite einzubetten. Da ich nichts einbetten muss, sondern nur ein Standbild (im Hintergrund) erfassen und verarbeiten muss, finde ich die erste Methode noch besser. – Mark

+0

@Mark Ich habe meine Antwort aktualisiert. Wenn Sie in naher Zukunft eine breite Browserunterstützung wünschen, müssen Sie wahrscheinlich beide Methoden unterstützen.Es sei denn, Ihre Verwendung ist nur mobil, in diesem Fall kann die Eingabe-Tag-Methode ausreichen (obwohl sie sich angesichts der W3C-Empfehlung zu einem bestimmten Zeitpunkt leicht ändern kann). Ich habe auch in meinem Update festgestellt, dass getUserMedia das Live-Video nicht anzeigen muss. Die meisten Demos zeigen es, weil es für Demozwecke interessanter ist. – kanaka

+0

Ok, obwohl meine Verwendung nur für Mobilgeräte ist, ist es wert zu wissen, dass getUserMedia das Live-Video nicht anzeigen muss. – Mark