2016-06-29 16 views
7

Czytam wiele sposobów na uzyskanie obrazu ze strony html5. jestem jeszcze pewien, co jest najlepsze dla moich potrzeb:Zrób zdjęcie z html5

  • szerokie wsparcie dla przeglądarek i OS: co najmniej: Chrome, Firefox, Safari domyślnie android
  • nie muszę akwizycji w czasie rzeczywistym. Użytkownik musi nacisnąć przycisk, aby zrobić zdjęcie, prosząc aplikacji aparatu systemu

Istnieją co najmniej trzy rozwiązania:

  • <input type="file" accept="image/*;capture=camera">
  • Navigator.getUserMedia() (wydaje się przestarzałe)
  • MediaDevices.getUserMedia() (wydaje się być eksperymentalna)

W każdym razie widzę wiele przykładów Aby osadzić kamerę na stronie (w/ getUserMedia), nie wiem, czy mogę polegać tylko na pierwszej metodzie.

+2

getUserMedia nie jest przestarzała, zmieniła nazwę na "navigator.mediaDevices.getUserMedia". Jeśli chcesz robić zdjęcia o wysokiej rozdzielczości na telefonie, przejdź z numerem 1, ponieważ 'getUserMedia' jest ograniczone do rozdzielczości wideo atm. – jib

+0

Ok, dzięki. Byłem zdezorientowany przez ten link: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/getUserMedia Nie zrozumiałem, zmieniłem tylko nazwę, ale jest to ta sama klasa! – Mark

+0

Zwraca obietnicę, zamiast oddzwaniać od powodzenia i niepowodzeń, ale poza tym jest taka sama. – jib

Odpowiedz

8

Korzystanie z interfejsu API WebRTC getUserMedia będzie obejmować wszystkie nowoczesne przeglądarki oprócz Safari: http://caniuse.com/#feat=stream

Here jest przykładowa strona, która wykorzystuje getUserMedia aby wykonać zdjęcie (z linkiem do page opisujący kod). Większość pokazów getUserMedia pokazuje strumień wideo w widocznym obszarze roboczym, ale nie jest to wymagane. Możesz przechwycić obraz za pomocą getUserMedia bez wyświetlania strumienia wideo w widocznym obszarze roboczym.

Niestety, Apple powoli adaptuje interfejsy API WebRTC, więc myślę, że tag wejściowy do pliku jest najlepszy, na jaki można mieć nadzieję, chyba że zechcesz użyć czegoś podobnego do Cordova. Here to opis użycia znacznika wejściowego pliku.

Jest to zalecenie kandydujące, które oznacza, że ​​jest na dobrej drodze, aby stać się standardem, jednak nie znam żadnej przeglądarki, która implementuje bieżące zalecenie W3C (używając go w atrybutach wejściowych). Styl <input type="file" accept="image/*"> wydaje się obecnie obsługiwany tylko przez przeglądarki mobilne.

Podsumowując, jeśli chcesz mieć szeroką obsługę przeglądarek w najbliższej przyszłości, będziesz musiał obsługiwać obie metody, dopóki Apple nie zacznie obsługiwać interfejsów API WebRTC lub dopóki inne przeglądarki komputerów stacjonarnych nie zaczną obsługiwać interfejsu Media Capture API (lub wariantu z atrybutem przechwytywania obsługiwanym obecnie przez przeglądarki mobilne).

+0

O ile rozumiem, API getUserMedia pozwala osadzać dane wyjściowe z kamery na stronie internetowej. Ponieważ nie muszę niczego osadzać, a jedynie pozyskiwać i przetwarzać (w tle) obraz nieruchomy, myślę, że pierwsza metoda jest jeszcze lepsza. – Mark

+0

@ Mark Zaktualizowałem swoją odpowiedź. Jeśli chcesz w najbliższej przyszłości obsługiwać szeroką przeglądarkę, prawdopodobnie będziesz potrzebować obsługi obu metod.O ile korzystanie z urządzenia nie jest po prostu mobilne, w takim przypadku metoda tagu wejściowego może wystarczyć (chociaż może nieznacznie zmienić się w pewnym momencie, biorąc pod uwagę zalecenie W3C). Zauważyłem także w mojej aktualizacji, że getUserMedia nie musi pokazywać obrazu na żywo. Większość pokazów pokazuje to, ponieważ jest to bardziej interesujące w celach demonstracyjnych. – kanaka

+0

OK, chociaż moje użycie jest tylko dla urządzeń mobilnych, warto wiedzieć, że getUserMedia nie wymaga wyświetlania wideo na żywo. – Mark